ホームページ > バックエンド開発 > Golang > Google App Engine データストアのクエリ テストが失敗するのはなぜですか?どうすれば修正できますか?

Google App Engine データストアのクエリ テストが失敗するのはなぜですか?どうすれば修正できますか?

DDD
リリース: 2024-12-07 06:21:17
オリジナル
863 人が閲覧しました

Why Do My Google App Engine Datastore Query Tests Fail, and How Can I Fix Them?

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 サイトの他の関連記事を参照してください。

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