2013-07-25 31 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

使用交易保證一致性。限制是在事務內部,你只能做祖先查詢。