【问题标题】:Strong consistency in GAE DatastoreGAE 数据存储中的强一致性
【发布时间】:2013-07-25 02:10:42
【问题描述】:

我正在编写 GAE/Python 应用程序并且需要强一致性。我已经阅读了有关模型父/祖先查询的信息,但仍然不明白。

假设我有用户模型。而且我也有类似项目模型的东西。用户可能拥有的物品很少。将每个项目父项设置为该用户就足够了吗?我的意思是为了每种项目操作(添加/删除/更新)的强一致性。

如果用户有钱并且每增加一个项目都需要一些费用怎么办?我需要在强一致的交易中从该用户那里推断出资金并向他添加项目。所以在这里我需要制作 Wallet 模型并将其作为孩子附加到每个用户?因为据我了解,用户字段的更新不会与以该用户为父的钱包模型实例的更新高度一致,对吗?

如何检查查询在开发机器/GAE 上是否确实强一致?

【问题讨论】:

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


    【解决方案1】:

    您不再需要使用 ndb 将这些种类放在同一组中,但我不确定旧 db 是否支持跨组事务。但如果不是,您需要在您的实体中拥有这些父/祖先。然后使用事务方法记住你需要在这个方法之外从多个模型中进行查询:

    对于旧数据库:

    @db.transactional
    def get_item(user, item):
        user.price -= item.price
        item.user = user.key
        user.put()
        item.put()
    

    对于 ndb 和跨组事务,意味着不需要成为父级来进行事务:

    @ndb.transactional(xg=True)
    def get_item(user, item):
        user.price -= item.price
        item.user = user.key
        user.put()
        item.put()
    

    【讨论】:

      【解决方案2】:

      使用事务保证一致性。限制是事务内只能进行祖先查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多