ホームページ > バックエンド開発 > Golang > Google App Engine クエリが正しくフィルタリングされないのはなぜですか?

Google App Engine クエリが正しくフィルタリングされないのはなぜですか?

DDD
リリース: 2025-01-01 04:48:11
オリジナル
596 人が閲覧しました

Why Aren't My Google App Engine Queries Filtering Correctly?

効率的な GAE クエリ フィルタリング

この記事では、Google App Engine (GAE) クエリをフィルタリングするときに直面する一般的な問題について説明します。この問題は、フィルターが有効になっていないように見え、予期しない検索結果が得られる場合に発生します。

提供されたコード スニペットを考えてみましょう:

q := datastore.NewQuery("employee")
q.Filter("Name =", "Andrew W")
ログイン後にコピー

この例では、目的は取得することです。特定の Name プロパティ「Andrew W.」を持つエンティティ。ただし、クエリは期待どおりに機能しません。これを解決するには、Query.Filter() がフィルターを適用した派生クエリを返すことを理解することが重要です。したがって、正しいアプローチは、Query.Filter() からの戻り値を保存して使用することです。

q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
ログイン後にコピー
ログイン後にコピー

または、簡潔にするために、これを 1 行で記述することもできます。

q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
ログイン後にコピー
ログイン後にコピー

考慮すべきもう 1 つの重要な要素は結果整合性です。これは GAE 開発 SDK でのデータストアの操作に影響します。これは、Put() 操作の直後に実行されたクエリが、保存されたエンティティをすぐに返さない可能性があることを意味します。これに対処するために、クエリを実行する前に短い遅延を導入できます。

time.Sleep(time.Second)

var e2 Employee
q := datastore.NewQuery("employee").Filter("Name=", "Andrew W")
// Rest of the code...
ログイン後にコピー

強い一貫性のある結果を得るには、キーの作成時に祖先キーの使用を検討してください。強い一貫性のある結果が必要でない限り、祖先キーは必須ではありません。結果の多少の遅延が許容できる場合は、祖先キーは必要ありません。

祖先キーはセマンティクスのみに使用される架空のキーであり、既存のエンティティを表す必要はないことに注意してください。同じ祖先キーが割り当てられたエンティティはエンティティ グループを形成し、このグループに対する祖先クエリは強い一貫性を保ちます。

以上がGoogle App Engine クエリが正しくフィルタリングされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート