Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 谷歌应用程序引擎Go分数计算和保存_Database_Google App Engine_Parallel Processing_Go - Fatal编程技术网

Database 谷歌应用程序引擎Go分数计算和保存

Database 谷歌应用程序引擎Go分数计算和保存,database,google-app-engine,parallel-processing,go,Database,Google App Engine,Parallel Processing,Go,我想在Go中制作一个简单的GAE应用程序,让用户通过两种方式投票和存储他们的答案。第一种方式是原始数据(数据库存储为“投票给X”),第二种方式是这些投票的连续计数(“12票给X,10票给Y”)。当多人同时访问应用程序时,存储这两个值的有效方法是什么?如果我从数据存储中检索数据,对其进行更改,并将其保存回一个实例,另一个实例可能希望并行执行相同的操作,我不确定最终结果是否正确。这样做似乎是一个好方法,即将所有投票事件存储为单独的实体(“投票支持X”方式)并使用进行重新计算(“12票对X,10票对Y

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

这样做似乎是一个好方法,即将所有投票事件存储为单独的实体(“投票支持X”方式)并使用进行重新计算(“12票对X,10票对Y”的方式),因此重新计算是离线和顺序进行的(没有任何竞争和其他并发问题)。然后,您必须每隔一段时间将recalc任务放入队列,以便更新结果

任务队列不允许添加与现有任务同名的另一个任务,但不允许检查特定任务是否已进入队列,因此,简单地尝试将同名任务添加到队列就足以确保不存在多个recalc任务

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