GAE数据存储区具有很强的一致性

时间:2013-07-25 09:10:35

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

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

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

如果用户有钱并且每件商品的加成费用会怎样?我需要在强大的一致性交易中从该用户中扣除资金并向他添加项目。那么在这里我需要制作钱包模型并将其作为孩子附加到每个用户?因为据我所知,用户字段的更新不会强烈一致,那个用户作为父母的钱包模型实例的更新将是,我是对的吗?

如何检查查询确实在开发机器/ GAE时确实一致?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

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