Cloud Datastore のクエリでのデータの整合性

データ整合性レベル

Cloud Datastore クエリは、次の 2 つの整合性レベルのいずれかで結果を返すことができます。

  • 強整合クエリは、結果が最新であることが保証されますが、完了までに時間がかかる場合があります。
  • 結果整合性クエリは、一般的により高速に実行されます。ただし、最新でない結果が返される場合があります。

結果整合クエリでは、結果の収集に使用されるインデックスも、結果整合性に基づいてアクセスされます。その結果、元のクエリ条件と一致しなくなったエンティティが返される場合があります。一方、強整合クエリでは常にトランザクション上の整合性が維持されます。エンティティとインデックスの更新方法について詳しくは、App Engine におけるトランザクションの分離の記事をご覧ください。

Cloud Datastore クエリのデータ整合性

クエリでは各クエリの特性に基づき、異なる整合性レベルを保証した結果が返されます。

  • 祖先クエリ(1 つのエンティティ グループ内のクエリ)は、デフォルトで強整合ですが、Cloud Datastore の読み取りポリシーを設定する(後述)ことで、結果整合にできます。
  • 非祖先クエリは常に結果整合になります。

キーによるエンティティの取得(「キーによる検索」とも呼ばれる)は強整合になります。

Cloud Datastore の読み取りポリシーの設定

パフォーマンスを向上させるために、すべての読み取りとクエリが結果整合になるように、Cloud Datastore の読み取りポリシーを設定できます(API を使用して強整合性のポリシーを明示的に設定することもできますが、現実的な効果はありません。これは、ポリシーに関係なく、非祖先クエリは常に結果整合になるためです)。

Cloud Datastore の呼び出し期限を設定し、Cloud Datastore から結果が返されるのを待機する時間の最大値(秒)を指定することもできます。この時間を過ぎるとアプリケーションは処理を中止し、エラーを返します。期限のデフォルト値は 60 秒です。現時点ではデフォルト値を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くできます(ユーザーへのレスポンスの迅速化などの目的に利用できます)。

Java で Cloud Datastore の読み取りポリシーを設定するには、まず Datastore サービス構成DatastoreServiceConfig)を作成します。これを作成するには、ネストされたヘルパークラス DatastoreServiceConfig.Builder を使用します。次に Datastore サービス構成を ReadPolicy クラスのインスタンスに渡します。次の例は、読み取りポリシー、呼び出し期限、またはその両方を設定する方法を示しています。

Java 8

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);

Java 7

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);

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境