1

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

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

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

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

4

2 回答 2

2

您不再需要使用 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()
于 2013-07-25T14:37:04.547 回答
2

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

于 2013-07-29T04:37:00.510 回答