Cloud Datastore 查詢中的資料一致性

資料一致性等級

Cloud Datastore 查詢可以提供兩種一致性等級的結果:

  • 同步一致性查詢可保證獲得最新的結果,但可能需要較長的時間才能完成。
  • 最終一致性查詢通常執行速度較快,但可能偶爾會傳回過時的結果。

在最終一致性查詢中,用於收集結果的索引也是透過最終一致性的方式來存取。因此,這類的查詢有時可能會傳回不再符合原始查詢條件的實體,而同步一致性查詢則始終保持交易一致性。如要進一步瞭解實體和索引的更新方式,請參閱 App Engine 中的交易隔離

Cloud Datastore 查詢資料一致性

根據查詢的性質,查詢會傳回一致性保證等級不同的結果:

  • 根據預設,祖系查詢 (在實體群組內) 會維持同步一致性,但可以藉由設定 Cloud Datastore 讀取政策 (請見下文) 改為維持最終一致性。
  • 非祖系查詢始終會維持最終一致性。

按金鑰擷取實體 (也稱為「按金鑰查詢」) 會維持同步一致性。

設定 Cloud Datastore 讀取政策

為了改善效能,您可以設定 Cloud Datastore 的「讀取政策」,如此一來所有的讀取和查詢都會具有最終一致性 (您也可以透過 API 明確設定同步一致性政策,但是這樣的設定並無實質效果,因為無論政策為何,非祖系查詢一律會採取最終一致性。)

您也可以設定 Cloud Datastore 的「呼叫期限」,即為應用程式等待 Cloud Datastore 傳回結果的時間上限 (以秒為單位),超過此期限就會因為錯誤而取消。 預設值為 60 秒,目前無法設為高於此上限,但可往下調整以確保特定作業快速失敗 (例如更快速傳回回應給使用者)。

如需在 Python 中設定 Cloud Datastore 的讀取政策和呼叫期限,請以引數的形式傳送至 QueryGqlQuery 類別的 run()get()fetch()count() 方法。 例如:

for result in Employee.all().run(limit=5,
                                 read_policy=db.EVENTUAL_CONSISTENCY,
                                 deadline=5):
  # Body of iterative loop

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境