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中文网其他相关文章!