ホームページ > バックエンド開発 > Golang > Google App Engine データストア クエリが一貫性のない結果を返し、間違ったカウンタ値を表示するのはなぜですか?

Google App Engine データストア クエリが一貫性のない結果を返し、間違ったカウンタ値を表示するのはなぜですか?

Barbara Streisand
リリース: 2024-12-04 05:18:12
オリジナル
523 人が閲覧しました

Why is my Google App Engine datastore query returning inconsistent results and displaying incorrect counter values?

GAE でのクエリ フィルタリング: 一貫性のない結果とカウンタの不一致の解決

次のシナリオを考えてみましょう: 2 つのレコードがデータストアに挿入され、1 つは1 人は「ジョー シチズン」という名前、もう 1 人は「アンドリュー W.」という名前です。ただし、後続のクエリを実行して「Andrew W」という名前のレコードを取得すると、予期せず「Joe Citizen」が返され、クエリ フィルタが正しく機能していないことが示されます。さらに、カウンターには 2 が表示され、レコードが 1 つだけ期待されている場合に 2 つのレコードが存在することを示します。この問題は、クエリ フィルタリングを修正し、不一致に対処するための調査を必要とします。

クエリ フィルタリングについて

この問題は、最初のクエリ構築における見落としが原因で発生します。 Go の Datastore API では、Query.Filter() メソッドは、指定されたフィルターが適用された新しいクエリ オブジェクトを返します。元のクエリ オブジェクトは変更されません。したがって、返されたクエリを新しい変数に割り当てることが重要です。

// Incorrect approach that does not apply the filter
q := datastore.NewQuery("employee")
q.Filter("Name =", "Andrew W")

// Correct approach that assigns the new query with the filter applied
q = datastore.NewQuery("employee").Filter("Name =", "Andrew W")
ログイン後にコピー

結果整合性への対処

GAE データストアは結果整合性を遵守します。これは、次のことを意味します。データの更新は、後続のクエリですぐに表示されない場合があります。これに対処するには、クエリを実行するコードに短い遅延を導入し、データが伝播するのに十分な時間を確保します。

time.Sleep(time.Second)

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

オプションの拡張機能

強い一貫性のある結果を得るには、キーの作成時に祖先キーの使用を検討し、祖先クエリを使用します。祖先キーにより、結果整合性の考慮事項に関係なく、同じエンティティ グループ内の操作が一貫して処理されることが保証されます。

key := datastore.NewKey(c, "employee", "", 0, ancestorKey)
ログイン後にコピー

最終的に、これらの問題に対処することで、クエリ フィルタリングは期待どおりに機能し、目的のレコードとデータストア内のカウンタ値を正確に反映します。

以上がGoogle App Engine データストア クエリが一貫性のない結果を返し、間違ったカウンタ値を表示するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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