Google App Engine データストア: クエリ テストの失敗の説明
Google App Engine データストアでのクエリのテストは、データストアの結果整合性のために困難になる場合がありますモデル。最初は、テスト コードは正しいように見えますが、クエリはデータストアに最近保存されたデータを取得できません。
この不一致は、運用環境で発生する可能性のある遅延を模倣した、データストアのシミュレートされた遅延から発生します。書き込み操作を実行した後、後続のクエリでは新しく追加されたエンティティがすぐに返されない場合があります。
解決策: 最終的な整合性
この問題を解決するには、短い遅延を組み込むことができます。 put 操作とクエリの間で、データストアが一貫して変更を伝播できるようにします。多くの場合、わずか 100 ミリ秒の遅延で十分です。
強整合性クエリ
または、StronglyConsistentDatastore オプションを true に設定して、強整合性クエリを利用できます。 。一貫性の高いクエリにより、最近書き込まれたデータをすぐに取得できるようになります。
例
次のコード スニペットは、シミュレートされたレイテンシー遅延を使用したクエリ テストを示しています。
type Entity struct { Value string } func TestEntityQuery(t *testing.T) { c, err := aetest.NewContext(nil) if err != nil { t.Fatal(err) } defer c.Close() key := datastore.NewIncompleteKey(c, "Entity", nil) key, err = datastore.Put(c, key, &Entity{Value: "test"}) if err != nil { t.Fatal(err) } // Wait briefly to simulate latency time.Sleep(100 * time.Millisecond) q := datastore.NewQuery("Entity").Filter("Value =", "test") var entities []Entity keys, err := q.GetAll(c, &entities) if err != nil { t.Fatal(err) } if len(keys) == 0 { t.Error("No keys found in query") } if len(entities) == 0 { t.Error("No entities found in query") } }
以上がGoogle App Engine データストアのクエリ テストが失敗するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。