Datastore 查詢中的資料一致性

資料一致性等級

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

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

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

Datastore 查詢資料一致性

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

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

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

設定 Datastore 讀取政策

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

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

如要在 Java 中設定資料儲存庫讀取政策,請使用巢狀輔助類別 DatastoreServiceConfig.Builder 建構 資料儲存庫服務設定 (DatastoreServiceConfig),並將 ReadPolicy 類別的例項傳遞給它。以下範例顯示如何設定讀取政策、呼叫期限或同時設定兩者:

double deadline = 5.0;

// Construct a read policy for eventual consistency
ReadPolicy policy = new ReadPolicy(ReadPolicy.Consistency.EVENTUAL);

// Set the read policy
DatastoreServiceConfig eventuallyConsistentConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy);

// Set the call deadline
DatastoreServiceConfig deadlineConfig = DatastoreServiceConfig.Builder.withDeadline(deadline);

// Set both the read policy and the call deadline
DatastoreServiceConfig datastoreConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy).deadline(deadline);

// Get Datastore service with the given configuration
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(datastoreConfig);

後續步驟