我有一个应用程序引擎Python应用程序,玩家发布他们的问题答案和一个评判团队投票他们的对或错。谷歌应用程序引擎投票计数
class vote(ndb.Model):
judge = ndb.KeyProperty(justice)
value = ndb.BooleanProperty()
timestamp = ndb.DateTimeProperty(auto_now_add = True)
question = ndb.KeyProperty(game_has_question_has_player)
和问题有这样的结构:投票是由法官利用该模型投
class game_has_question_has_player(ndb.Model):
match = ndb.KeyProperty(game)
challenge = ndb.KeyProperty(questionList)
gamer = ndb.KeyProperty(player)
answer = ndb.StringProperty()
passed = ndb.BooleanProperty()
只要正面或负面票数占1/2 +1法官的问题被视为已通过或失败。这可以在所有评委投票前发生,并且是应用程序处理其余挑战的关键。
我的问题与那一刻有关。当一个挑战/问题刚刚通过时,我怎样才能可靠地知道?总结我在哪里卡住了,这是我能看到的选项:
投票方法查询以前的票,并决定(考虑到投正投)羯羊更新中的“通过”场“game_has_question_has_player”。这里的问题在于,由于其他选票同时由其他选票同时投出,并且其他选票也同时执行,因此对以前选票进行计数的查询可能会给出错误的答案。
我改变'问题'模型为投票添加计数器。由于法官会同时通知投票的挑战,因此我看到了争议问题,因此可以在时间上非常接近地投票。我可以使用事务处理,但我不清楚它在生产中的限制(我现在在开发服务器中)。在某个游戏中可以容易地有10个评委,但是如果该游戏占了数千票的比例* =〜10 *问题的数量*参与者的数量。
我推迟了一个任务队列的重新计数。如果每个投票都是一样的:我们不是第一个点,只是推迟了?
我已阅读关于分片计数器,但我没有看到它们适合在这里;选票正确投出,只是通过测试的“事件”,这对我来说似乎很棘手。
非常感谢任何见解或想法。
非常感谢。我认为我会首先处理这个任务难题,因为它并不意味着争用,因此可能更“经济” – 2014-10-07 15:12:20