2011-10-18 81 views
0

我想在Go中制作一个简单的GAE应用程序,让用户用两种方式投票和存储他们的答案。第一种方式将是原始数据(“投票给X的数据库存储”),第二种方式是这些投票的计数(“X代表12票,Y代表10票)”。什么是同时存储这两个值的有效方法是多人同时访问应用程序?如果我从数据存储中检索数据,将其更改并将其保存回一个实例,另一个可能想要并行执行相同的操作,并且我不确定最终结果是否正确。Google App Engine Go计分和保存

回答

1

这似乎是一个很好的方法,就是将所有投票事件简单地存储为单独的实体(“投票支持X”),并使用Task Queue进行重新计算(“12票X,10票Y“方式),因此重新计算是按离线和顺序完成的(没有任何种族和其他并发问题)。然后,您必须每隔一段时间将重新计算任务置于队列中,以便更新结果。

任务队列不允许添加具有与现有名称相同名称的其他任务,但不允许检查特定任务是否已入队,因此可能只是尝试将具有相同名称的任务添加到队列将足以确保多个重新计算任务不存在。

另一种方法是使用等待来自输入通道的戳的goroutine来重新计算结果。我没有在App Engine上运行这样的goroutine,所以我不确定这种方法的一般行为。