2015-07-21 50 views
1

父數據存儲實體的好處之一是,我可以在我的實體上執行事務。數據存儲實體應該總是有父項

https://cloud.google.com/appengine/docs/python/datastore/transactions

不過,我並不需要對我的實體進行交易。

我在想,是不是沒有親我的實體?因爲,這將使我的代碼更簡單和易於維護?

沒有父母對實體有任何副作用嗎?

我沒有父母的關注之一,是最終一致性。寫操作後,我希望我的讀取操作能夠獲取最新的寫入值。我正在使用User.get_or_insert寫入(可能讀取)和User.get_by_id爲只讀。

我想執行User.get_or_insert後,下一個請求User.get_by_id會返回最新值。我想知道,要達到強一致性,是父母的重要事情嗎?

回答

2

我在想,是不是沒有親我的實體?

當然,是的,但您需要考慮如何讀取和寫入數據,以免碰到任何問題。

如果您沒有祖先,您的查詢將只有最終一致性,所以您可能會發現一些結果與您的查詢不符。請記住,您也可以使用可能涉及多達5個實體組的交叉實體組(「XG」)事務(沒有祖先的實體定義自己的實體組),這可以讓您有一定的靈活性。

另一方面,無論您的實體是否具有祖先,您都可以隨時使用get-by-key獲得強一致性。

+0

好的答案,但可能值得澄清的是,您的第一句話正在回答問題,因爲它在問題主體中被解釋爲問題,而不是標題中的問題 - 但不幸的是相反:)並且跨組交易現在受到限制到25個實體組,從5增加到 – Greg

+0

@Greg - 謝謝你,好點!爲了避免混淆,我添加了一個引用。 – tx802

1

這意味着您將受到最終一致性的限制:交易之外的查詢不保證一致。如果這不打擾你,那麼沒有理由使用父母。

+0

如果我使用'User.get_or_insert'寫入(可能讀取)和'User.get_by_id'來讀取,它可以在沒有父級的情況下實現強一致性行爲嗎? –

+0

那麼,如果你只能通過密鑰訪問項目,那麼你會一直獲得最新版本。但是你確定你永遠不需要通過名字來查詢用戶,或者是否遍歷符合某些標準的用戶? –