首页 > 后端开发 > Golang > 为什么我的 Google App Engine 数据存储区查询测试失败,如何修复它们?

为什么我的 Google App Engine 数据存储区查询测试失败,如何修复它们?

DDD
发布: 2024-12-07 06:21:17
原创
864 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板