首页 > 后端开发 > Golang > 为什么我的 Google App Engine 数据存储区查询返回不一致的结果并显示不正确的计数器值?

为什么我的 Google App Engine 数据存储区查询返回不一致的结果并显示不正确的计数器值?

Barbara Streisand
发布: 2024-12-04 05:18:12
原创
506 人浏览过

Why is my Google App Engine datastore query returning inconsistent results and displaying incorrect counter values?

GAE 中的查询过滤:解决不一致的结果和计数器差异

考虑以下场景:两条记录插入到数据存储中,其中一条带有一个名字是“Joe Citizen”,另一个名字是“Andrew W.”。但是,当执行后续查询来检索名为“Andrew W”的记录时,它意外返回“Joe Citizen”,这表明查询过滤器无法正常运行。此外,计数器显示 2,表明存在两条记录,而实际上预计只有一条记录。需要对此问题进行调查,以纠正查询过滤并解决不一致问题。

了解查询过滤

该问题源于初始查询构造中的疏忽。在 Go 的 Datastore API 中,Query.Filter() 方法返回一个应用了指定过滤器的新查询对象。它不会修改原始查询对象。因此,将返回的查询分配给新变量至关重要:

// Incorrect approach that does not apply the filter
q := datastore.NewQuery("employee")
q.Filter("Name =", "Andrew W")

// Correct approach that assigns the new query with the filter applied
q = datastore.NewQuery("employee").Filter("Name =", "Andrew W")
登录后复制

解决最终一致性

GAE 数据存储遵循最终一致性,这意味着数据更新可能不会立即对后续查询可见。为了解决这个问题,请在查询执行的代码中引入短暂的延迟,以便有足够的时间来传播数据:

time.Sleep(time.Second)

var e2 Employee
q := datastore.NewQuery("employee").Filter("Name=", "Andrew W")
登录后复制

可选增强

对于如果结果高度一致,请在创建密钥时考虑使用祖先密钥并使用祖先查询。祖先键确保同一实体组内的操作得到一致的处理,而不管最终的一致性考虑因素:

key := datastore.NewKey(c, "employee", "", 0, ancestorKey)
登录后复制

最终,通过解决这些问题,查询过滤将按预期运行,返回预期的记录并准确反映数据存储中的计数器值。

以上是为什么我的 Google App Engine 数据存储区查询返回不一致的结果并显示不正确的计数器值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板