Google app engine GAE数据存储中的强一致性

Google app engine GAE数据存储中的强一致性,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我正在编写GAE/Python应用程序,需要很强的一致性。我读过关于模型父/祖先查询的内容,但仍然不理解 假设我有一个用户模型。我还有一些类似于项目模型的东西。用户可能拥有很少的物品。将每个项目父项设置为该用户是否足够?我的意思是为了使每种项目操作(添加/删除/更新)具有很强的一致性 如果用户有钱,而且每增加一项都要花费一些钱怎么办?在强一致性交易中,我需要从那个用户那里推断出钱,并向他添加项目。所以在这里,我需要制作钱包模型,并将其作为每个用户的孩子连接到每个用户身上?因为据我所知,用户字段的

我正在编写GAE/Python应用程序,需要很强的一致性。我读过关于模型父/祖先查询的内容,但仍然不理解

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

如果用户有钱,而且每增加一项都要花费一些钱怎么办?在强一致性交易中,我需要从那个用户那里推断出钱,并向他添加项目。所以在这里,我需要制作钱包模型,并将其作为每个用户的孩子连接到每个用户身上?因为据我所知,用户字段的更新不会与钱包模型实例的更新(以该用户为家长)保持很强的一致性,对吗


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

使用ndb时,您不再需要在同一组中使用这些类型的查询,但我不确定old 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()

使用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()

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

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