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

データ整合性レベル

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

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

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

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

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

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

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

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

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

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

Python で Cloud Datastore の読み取りポリシーと呼び出し期限を設定するには、それらを引数として Query クラスまたは GqlQuery クラスの run()get()fetch()、および count() メソッドに渡します。例:

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

次のステップ

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

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

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