Testing 谷歌数据存储模拟器
为了进行测试,我们使用Google提供的LocalDatastoreHelper类启动云数据存储模拟器的本地实例 有趣的发现是,我们可以用代码插入数据,然后通过执行GQL查询再次找到数据Testing 谷歌数据存储模拟器,testing,indexing,google-cloud-datastore,emulation,Testing,Indexing,Google Cloud Datastore,Emulation,为了进行测试,我们使用Google提供的LocalDatastoreHelper类启动云数据存储模拟器的本地实例 有趣的发现是,我们可以用代码插入数据,然后通过执行GQL查询再次找到数据 选择[…]其中myfield=true 如果我们在谷歌云上托管一个“实时”商店 但是: 当我们对本地运行的仿真器运行相同的代码时,插入可以工作,但查询不能。findAll()可以正常工作,因此它看起来像是插入和读取一般工作,但不知何故索引丢失了 在阅读了几个小时的文档之后,我没有发现任何提示,为什么会发生这种情
选择[…]其中myfield=true
如果我们在谷歌云上托管一个“实时”商店
但是:
当我们对本地运行的仿真器运行相同的代码时,插入可以工作,但查询不能。findAll()可以正常工作,因此它看起来像是插入和读取一般工作,但不知何故索引丢失了
在阅读了几个小时的文档之后,我没有发现任何提示,为什么会发生这种情况
有人能帮忙吗?很可能你遇到的是最终的一致性。默认情况下,数据存储模拟器模拟0.9的一致性。请注意,大多数查询最终都是一致的,除非WHERE子句是键或查询是祖先查询。我相信你是幸运的,“生活”商店返回结果。如果您在一天中的不同时间运行测试足够多的时间,那么它可能不会返回结果(这完全取决于更新索引的时间和时间) 这就是说,数据存储模拟器有一个选项来指定它应该模拟的一致性级别。这可以通过以下命令完成:
gcloud beta emulators datastore start --data-dir=/my/data/dir --host-port localhost:9999 --consistency 1.0
一致性级别为1.0将保证一致的读取。我不确定是否有选项可以设置与LocalDatastoreHelper的一致性级别
同样,“实时”数据存储在所有情况下始终是一致的,除了我上面提到的少数例外情况 你最可能遇到的是——最终的一致性。默认情况下,数据存储模拟器模拟0.9的一致性。请注意,大多数查询最终都是一致的,除非WHERE子句是键或查询是祖先查询。我相信你是幸运的,“生活”商店返回结果。如果您在一天中的不同时间运行测试足够多的时间,那么它可能不会返回结果(这完全取决于更新索引的时间和时间) 这就是说,数据存储模拟器有一个选项来指定它应该模拟的一致性级别。这可以通过以下命令完成:
gcloud beta emulators datastore start --data-dir=/my/data/dir --host-port localhost:9999 --consistency 1.0
一致性级别为1.0将保证一致的读取。我不确定是否有选项可以设置与LocalDatastoreHelper的一致性级别
同样,“实时”数据存储在所有情况下始终是一致的,除了我上面提到的少数例外情况 为了不让人们对我最初的问题感到困惑,我回答自己,因为我们找到了问题的根源 不幸的是,live和local之间的差异并不是由于数据存储端的行为不同,而是源于我们的代码-( 就我所见,我们以前关于未生成索引的所有假设都是错误的。在这方面,local的行为与live完全相同
感谢您的贡献!为了不让人们对我最初的问题感到困惑,我自己回答,因为我们找到了问题的根源 不幸的是,live和local之间的差异并不是由于数据存储端的行为不同,而是源于我们的代码-( 就我所见,我们以前关于未生成索引的所有假设都是错误的。在这方面,local的行为与live完全相同
感谢您的贡献!感谢您的建议!我将研究一致性方面。感谢您的建议!我将研究一致性方面。