2013-07-25 33 views
1

我正在编写GAE/Python应用程序,需要强大的一致性。我已经读过Model父/祖的查询,但仍然不明白。GAE Datastore中的强一致性

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

如果用户有钱,每件物品的附加费用会如何呢?我需要强大的一致性交易从该用户那里扣除资金并向他添加项目。那么在这里,我需要制作电子钱包模型并将其作为其小孩附加到每个用户?因为据我了解,用户字段的更新不会很强一致,在那个用户作为父母的钱包模型实例的更新将是,我说得对吗?

我如何检查查询确实在开发机器/ GAE上确实非常一致?

回答

2

你不需要再与ndb在同一组中,但如果它曾经支持跨组事务,我不确定是否使用旧分贝。但如果不是,你需要在你的实体中拥有这些父母/祖先。然后使用事务方法记住,你需要做多个模型的查询,这个方法之外:

对于旧的数据库:

@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

使用交易保证一致性。限制是在事务内部,你只能做祖先查询。