2013-05-31 23 views
0

我在使用Google App Engine尝试确保聚合分片实体时具有很强的稳定性方面存在问题。我原本是在这样的假设下,批次通过密钥“获取”确保读取是最新的,但是之后得知这是不正确的。现在我很困惑我如何能够实现强大的恒定性。Google应用引擎着色一致性

下面是我想要做的: 我正在构建一个用户投票投票的“游戏”。投票速度很快(每用户分钟大约一次),所以我相信有必要使用阴影技术来确保用户在写投票时不会受到瓶颈。当用户进行投票时,会读取一个投票实体以确保投票仍在运行,然后假设向投票片段写入投票成功,用户应该收到投票已计数的通知(在返回的页面上)。投票结束后,碎片被组合并且基于每个用户的投票完成计算;然后显示结果。

在分片聚合过程中实际看到用户的投票已收到确认,这一点很重要。如果服务器拒绝用户的投票(尤其是在轮询结束时),但他们应该收到失败通知。我很担心GAE的最终一致性保证可能会出现一些情况(只使用基本着色),在这种情况下用户可以成功地将他们的投票写入分片(并获得成功通知),但累加器尚未看到更新,不计算最终帐户中的用户投票。

它可以防止这种情况?我甚至需要在实践中担心这一点?

谢谢!

+1

你说**我最初是在假设批次“通过密钥获取”确保读取是最新的,但后来知道这是不正确的。**什么使你相信这一点。通过Key获取是一致的,不使用祖先的查询将不一致。 –

+0

你可以展示你如何发布你的get操作的代码吗?也许他们实际上并没有通过关键操作获得(这应该是一致的)。 – dragonx

回答

0

如果您尝试实现实时结果,请使用memcache。 incr()方法应该对您的投票游戏特别感兴趣。您可以在不太频繁的基础上将结果写入数据存储区(例如,每100张选票并在投票结束时再次输入),这样您的表现会好得多。你甚至可以避免这种分片。