我想在Go中做一个简单的GAE应用程序,让用户以两种方式投票和存储他们的答案。第一种方式是原始数据( "voted for X“的数据库存储),第二种方式是对这些选票进行连续计数("12票支持X,10票支持Y")。在多人同时访问应用程序的情况下,存储这两个值的有效方法是什么?如果我从数据存储中检索数据,更改它,然后为一个实例保存它,另一个实例可能希望并行执行相同的操作,并且我不确定最终结果是否正确。
发布于 2011-10-18 18:41:23
这似乎是一个很好的方法,简单地将所有投票事件存储为单独的实体( "voted for X“方式),并使用Task Queue进行重新计算( "12票支持X,10票支持Y”),因此重新计算是离线顺序完成的(没有任何竞争和其他并发问题)。然后,您必须每隔一段时间将recalc任务放到队列中,以便更新结果。
Task Queue不允许添加与现有任务同名的另一个任务,但不允许检查特定任务是否已入队,因此,可能只需尝试将同名任务添加到队列中,就足以确保不存在多个重计算任务。
另一种方法是使用goroutine等待来自输入通道的戳,以便重新计算结果。我还没有在App Engine上运行过这样的goroutines,所以我不确定这种方法的一般行为。
https://stackoverflow.com/questions/7805064
复制相似问题