首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仿真程序

仿真程序
EN

Stack Overflow用户
提问于 2017-04-21 11:48:18
回答 2查看 948关注 0票数 1

对于测试,我们使用Google提供的LocalDatastoreHelper类启动云数据存储仿真器的本地实例。

令人感兴趣的是,我们可以使用代码插入数据,然后通过执行GQL查询再次查找数据。

SELECT [..] WHERE myfield = true

如果我们在谷歌云( Google )托管的“实时”商店中这样做的话。

但:

当我们对本地运行的仿真器运行相同的代码时,insert工作,但查询不起作用。findAll()工作正常,所以它看起来像插入和读取一般的工作,但是不知怎么的,索引丢失了吗?

在阅读了几个小时的文档后,我没有发现任何提示,为什么会发生这种情况。

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-21 15:26:17

为了不把别人和我原来的问题搞混,我回答自己,因为我们找到了问题的根源。

不幸的是,live和local之间的区别并不是由于数据存储端的行为不同,而是植根于我们的代码中。:-(

据我所见,我们以前关于没有生成索引的所有假设都是错误的。就此而言,当地人的行为就像现场直播一样。

谢谢你的贡献!

票数 1
EN

Stack Overflow用户

发布于 2017-04-21 13:17:24

最有可能的是,你遇到的是-最终的一致性。默认情况下,Datastore仿真程序模拟的一致性为0.9。注意,大多数查询最终都是一致的,除非WHERE子句是键,或者查询是祖先查询。我相信你只是幸运的是,“现场”商店正在返回的结果。如果在一天中的不同时间运行足够次数的测试,则可能不会返回结果(这完全取决于更新索引所需的时间和时间)。

也就是说,Datastore仿真程序有一个选项来指定它应该模拟的一致性级别。这可以通过以下命令来完成:

代码语言:javascript
复制
gcloud beta emulators datastore start --data-dir=/my/data/dir --host-port localhost:9999 --consistency 1.0

一致性级别为1.0将保证一致的读取。我不确定是否有选项可以设置与LocalDatastoreHelper的一致性级别。

同样,除了我前面提到的少数例外情况之外,所有情况下“实时”数据存储最终都是一致的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43541959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档