データ整合性レベル
Datastore のクエリでは、次の 2 つの整合性レベルのいずれかで結果を返すことができます。
結果整合クエリでは、結果の収集に使用されるインデックスも、結果整合性に基づいてアクセスされます。その結果、元のクエリ条件と一致しなくなったエンティティが返される場合があります。一方、強整合クエリでは常にトランザクション上の整合性が維持されます。
Datastore クエリのデータ整合性
クエリでは各クエリの特性に基づき、異なる整合性レベルを保証した結果が返されます。
- 祖先クエリ(1 つのエンティティ グループ内のクエリ)は、デフォルトでは強整合性ですが、Datastore の読み取りポリシーを設定することで(後述)、結果整合性にできます。
- 非祖先クエリは常に結果整合になります。
キーによるエンティティの取得(「キーによる検索」とも呼ばれる)は強整合になります。
Datastore の読み取りポリシーの設定
パフォーマンスを向上させるために、すべての読み取りとクエリが結果整合になるように、Datastore の読み取りポリシーを設定できます(API を使用して強整合性のポリシーを明示的に設定することもできますが、現実的な効果はありません。これは、ポリシーに関係なく、非祖先クエリは常に結果整合になるためです)。
Datastore の呼び出し期限を設定し、Datastore から結果が返されるのを待機する時間の最大値(秒)を指定することもできます。この時間が経過するとアプリケーションは処理を中止し、エラーを返します。期限のデフォルト値は 60 秒です。現時点ではデフォルト値を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くできます(ユーザーへのレスポンスの迅速化などの目的に利用できます)。 Python で Datastore 読み取りポリシーと呼び出し期限を設定するには、run()
、get()
、fetch()
、count()
クラスの Query
または GqlQuery
メソッドに引数として渡します。例:
for result in Employee.all().run(limit=5,
read_policy=db.EVENTUAL_CONSISTENCY,
deadline=5):
# Body of iterative loop
次のステップ
- クエリが返す結果を指定する方法とクエリの結果を細かく制御する方法を学習する。
- Datastore のクエリにおける一般的な制限について学習する。
- クエリの結果を一括して取得できるクエリカーソルについて学習する。
- Datastore のクエリの基本的な構文と構造について学習します。