使用GAE + ndb进行匹配

时间:2016-10-06 15:02:29

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我有一个游戏,用户联系服务器以找到想要玩游戏的用户。这是游戏请求的基本架构。

enter image description here

我正在使用ndb为Google DataStore中的每个用户级别存储等待队列。

我通过密钥访问这些队列以确保强一致性(每this article)。实体使用重复的({3}}列表存储在队列中。

问题:

  1. 实体从等待队列中删除,因为它与请求匹配。交易已提交但尚未应用。该实体与另一个请求匹配并被删除。这会引发错误吗?
  2. 这些强烈一致的访问限制为~1写/秒。是否有更好的架构可以消除这种限制?
  3. 我对后一个问题考虑的一件事是维护多个队列(其数量随着需求而增长和缩小)。

2 个答案:

答案 0 :(得分:2)

不确定您的第一个问题,但您可以在交易中使用sleep语句模拟它。

对于第二个问题,您可以使用另一种架构。如果等待队列持续时间相对较短(几分钟而不是几小时),您可能需要使用memcache。它比写入磁盘快得多,您可以避免处理一致性问题。

答案 1 :(得分:1)

1.-如果您在交易中执行实体获取和发布,则同一实体无法与游戏匹配,因此没有错误且保持一致。

2.-每秒写1次是同一实体组内交易的限制。如果需要更多,可以对队列实体进行分片。

您可以使用专用的memcache或redis实例来避免争用。这比数据存储快得多。

了解这些人如何使用树节点进行匹配: https://www.youtube.com/watch?v=9nWyWwY2Onc