Datastore 查詢中的資料一致性

資料一致性等級

Datastore 查詢能夠提供的結果分為兩種一致性等級:

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

在最終一致性查詢中,用於收集結果的索引也是透過最終一致性的方式來存取。因此,這類查詢有時候會傳回不再符合原始查詢條件的實體,而具有同步一致性的查詢則一律具有交易一致性。

Datastore 查詢資料一致性

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

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

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

設定 Datastore 讀取政策

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

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

如要在 Python 中設定資料儲存庫讀取政策和呼叫期限,請將這些項目做為引數傳遞至 QueryGqlQuery 類別的 run()get()fetch()count() 方法。例如:

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

後續步驟