首頁 > 後端開發 > Golang > 為什麼我的 Google App Engine 資料儲存區查詢測試失敗,如何修復它們?

為什麼我的 Google App Engine 資料儲存區查詢測試失敗,如何修復它們?

DDD
發布: 2024-12-07 06:21:17
原創
862 人瀏覽過

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

Google App Engine 資料儲存區:查詢測試失敗說明

由於資料儲存區的最終一致性,Google App Engine 資料儲存區中測試查詢可能具有挑戰性模型。最初,您的測試程式碼可能看起來正確,但查詢無法檢索最近保留在資料儲存中的資料。

這種不一致是由資料儲存的模擬延遲引起的,它模仿了生產環境中遇到的潛在延遲。執行寫入操作後,後續查詢可能不會立即傳回新新增的實體。

解決方案:最終一致性

要解決此問題,您可以加入短暫的延遲在放置操作和查詢之間進行操作,以允許資料儲存一致地傳播更改。在許多情況下,只需 100 毫秒的延遲就足夠了。

強一致性查詢

或者,您可以將 StronglyConcientDatastore 選項設為 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板