【问题标题】:Google app engine shading consistency谷歌应用引擎着色一致性
【发布时间】:2013-05-31 23:10:46
【问题描述】:

我在使用 Google App Engine 尝试在聚合分片实体时确保强稳定性时遇到问题。我最初的假设是通过键批量“获取”确保读取是最新的,但后来了解到这是不正确的。现在我很困惑如何才能实现强大的恒常性。

这就是我想要做的事情: 我正在构建一个用户在投票中投票的“游戏”。投票进行得很快(大约每用户分钟一次),所以我认为有必要使用阴影技术来确保用户在写投票时不会遇到瓶颈。当用户进行投票时,会读取投票实体以确保投票仍在运行,然后假设将投票写入分片成功,用户应该收到他们的投票已计入的通知(在返回的页面上)。投票结束后,根据每个用户的投票组装分片并进行计算;然后显示结果。

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

有可能避免这种情况吗?在实践中我什至需要担心这个吗?

谢谢!

【问题讨论】:

  • 你说我最初的假设是通过键批量“获取”确保读取是最新的,但后来了解到这是不正确的。是什么导致你相信这一点。通过 Key 获取是一致的,不使用祖先的查询将不一致。
  • 你能展示你如何发出你的get操作的代码吗?也许它们实际上并没有通过关键操作得到(这应该是一致的)。

标签: python google-app-engine concurrency transactions


【解决方案1】:

如果您想获得实时结果,请使用memcache。 incr() 方法应该对您的投票游戏特别感兴趣。您可以以低得多的频率将结果写入数据存储区(例如,每 100 票并在投票结束时再次写入),这样您的性能会好得多。您甚至可以通过这种方式避免分片。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多