【发布时间】:2022-08-03 08:33:21
【问题描述】:
我在 Datastore 模式下使用带有 objectify 和 Firestore 的云端点。尽管在documentation 中说所有查询都是强一致的,但我发现它们不在以下示例中:
示例 1
我创建了一个通过属性查询实体的端点,将 +1 添加到其上的 count 属性,然后将其保存回数据存储区。然后我有 50 个不同的客户端同时执行该方法。我希望count 属性为 50,但是,它通常最终在 25-30 之间。
示例 2
我有一个通过属性查询实体的端点。如果实体不存在,我将创建实体并将其保存到数据存储区。如果它存在,我只是返回它。同样,我同时使用 50 个不同的客户端访问了这个端点。我希望数据存储区中只有一个实体。但是,我可能会有 5-10 个相同的实体。
在我看来,这并不一致。如果我在上述端点中获取我的代码并将它们放入一个重试事务中,那么一切都会按预期工作。我在objectify中环顾四周,看看是否在某处设置了ReadOptions,但据我所知,没有,所以它应该使用默认的read_consistency=STRONG
-
NDB 库会自动缓存查询结果,如果您想确保拥有最新数据(对于像您这样的场景),您可以在执行查询时关闭缓存。数据存储库(或 Objectify)是否有类似的东西?
-
@NoCommandLine 根据我对 Objectify 文档的阅读,除非您明确设置它(我没有),否则它不会缓存。
-
数据存储库呢?也许它拥有它。由于 NDB 库有它,并且 NDB 基本上是 Datastore 库的一个方便的包装器,所以底层 Datastore 库有它的可能性
-
来自 github:
Objectify v6+ uses the Cloud Datastore API- 我认为它可以直接访问它。
标签: google-cloud-platform google-cloud-datastore google-cloud-endpoints objectify