我想在Go中制作一个简单的GAE应用程序,让用户可以通过两种方式投票和存储答案。第一种方式是原始数据(“投票给X”的数据库存储),第二种方式是这些投票的运行计数(“X为12票,Y为10票”)。在多个人同时访问应用程序的情况下,存储这两个值的有效方法是什么?如果我从数据存储中检索数据,更改它,并将其保存回一个实例,另一个可能想要并行执行相同操作,并且我不确定最终结果是否正确。
答案 0 :(得分:1)
这似乎是一种好方法,只需将所有投票事件存储为单独的实体(“投票为X”方式)并使用Task Queue进行重新计算(“12投票给X, Y“way”10票,所以重新计算是离线和顺序完成的(没有任何比赛和其他并发问题)。然后,您必须每隔一段时间将重新计算任务放入队列,以便更新结果。
任务队列不允许添加与现有任务同名的其他任务,但不允许检查特定任务是否已经入队,因此可能只是尝试向队列添加具有相同名称的任务将足以确保不存在多个重新计算任务。
另一种方法是使用goroutine等待来自输入通道的戳,以便重新计算结果。我没有在App Engine上运行这样的goroutine所以我不确定这种方法的一般行为。