是否有結果的差異,我可以從這段代碼期望:與此代碼Google Appengine數據存儲何時可以返回陳舊數據?
query = MyModel.all(keys_only=True).filter('myFlag', True)
keys = list(query)
models = db.get(keys)
:
query = MyModel.all().filter('myFlag', True)
models = list(query)
即,將models
在兩個一樣的嗎?
如果不是,爲什麼不呢?我曾認爲最終一致性用於描述模型的索引需要一段時間才能更新,因此可能與最近寫入的數據不一致。
但我最近的經歷:我其實是從查詢獲得舊數據,如第二個,其中model.myFlag
是True
對通過查詢檢索到的模型,但False
當我真正得到通過鑰匙模型的情況下。
那麼在那種情況下,myFlag
的數據來自哪裏呢?
是否通過鍵獲取實體可確保跨數據存儲節點複製並返回最新數據,而通過查詢獲取它只是從最近的數據存儲節點檢索數據?
編輯: 我看了這篇文章,並假設雲存儲的工作方式相同的AppEngine上數據存儲時,回答我的問題是肯定的,實體查詢返回可能有過時的值。
通過編輯你是正確的,如果你想擁有很強的一致性,總是去尋找關鍵或祖先的查詢。 @帕特里克科斯特洛把你覆蓋。 –