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中文網其他相關文章!