数据存储模拟器返回“事务内只允许祖先查询”。它不支持 Datastore 模式下的 Firestore 吗?

Posted

技术标签:

【中文标题】数据存储模拟器返回“事务内只允许祖先查询”。它不支持 Datastore 模式下的 Firestore 吗?【英文标题】:Datastore emulator returns 'Only ancestor queries are allowed inside transactions’. Doesn't it support Firestore in Datastore mode? 【发布时间】:2021-09-06 22:46:45 【问题描述】:

我在本地运行使用 Datastore 的应用程序。 该应用程序是用 Java 编写的并使用 Objectify。代码如下。

ofy().transact(() ->  ofy().load().type(PersonEntity.class).list(); )

当我的应用连接到我的 GCP 项目的数据存储区时,这个简单的查询会成功运行。

但是,当我使用cloud-datastore-emulator 时,此查询被拒绝并显示错误消息Only ancestor queries are allowed inside transactions

关于非祖先查询seems to be removed on Firestore in Datastore mode的此限制。但是 cloud-datastore-emulator 似乎仍然限制它。

我的问题是,

cloud-datastore-emulator 不支持 Datastore 模式下的 Firestore? 有什么方法可以在 Datastore 模式下模拟 Firestore?

gcloud SDK 版本:346.0.0

【问题讨论】:

【参考方案1】:

嗯,你的问题的答案是:它应该支持它,因为模拟器应该支持生产环境所做的一切。话虽如此,我在看到您的问题后确实浏览了文档,发现here 声明:

Cloud SDK 包含一个local emulator of the production Datastore mode environment。

但是,如果您按照链接进行操作,就会发现这是旧版 Datastore 和处于 Datastore 模式的 Firestore 的模拟器。所以这可能就是你看到这种行为的原因。有了这些信息,最好在 Google's Issue Tracker 中打开一个案例,以便他们的工程团队可以澄清这是否是预期行为,如果不是,请解决此问题。

【讨论】:

感谢您的回答。我发现了一个类似的问题issuetracker.google.com/issues/178391031

以上是关于数据存储模拟器返回“事务内只允许祖先查询”。它不支持 Datastore 模式下的 Firestore 吗?的主要内容,如果未能解决你的问题,请参考以下文章

大数据架构综述数据存储篇之Hbase

单元测试如何使用 Mockito 模拟存储库

mysql日期函数及批量循环返回主键ID

mysql 数据存储引擎区别

带颤振的最低安卓版本

嘲弄如何断言类实例