首页 > 解决方案 > GCP 数据存储突然极端数据不一致 (NDB 1.8.0)

问题描述

我在欧洲西部地区有 6 个月大的 Py38 标准 gae 项目以及处于 DATASTORE 模式的 Firestore。

即使使用 Redis 作为全局缓存或不使用,我也从未遇到过任何不一致的问题。直到上周,put(插入)后立即(1 秒进行重定向)获取产生了新的结果。我做了一些基准测试,大约需要 30 秒才能完成全局查询。它实际上的行为类似于将一致性参数设置为 0.05 的数据存储模拟器

我在这里阅读了很多关于数据存储及其最终一致性的信息,但正如文档所说,这对于“旧”版本是正确的。数据存储模式下的新 Firestore 应确保按照此部分的强一致性。

最终一致性,所有 Datastore 查询都变得强一致性。

我对这个说法的解释是错误的吗?

我还创建了一个新项目(同一区域),只有基本的 ndb 初始化并且仍然极端“滞后”。

我已经没有什么可能导致这种新行为的想法了。可能是 Warshaw 数据中心刚刚启动,这就是问题的根源吗?

google-cloud-ndb==1.8.0 的抽象代码

class X(ndb.Model):
  foo = ndb.StringProperty()

x = X(foo="a")
x.put()

time.sleep(5)    

for y in X.query(): # returns 0 results
  print(y)

如果我通过密钥获得实体,它就在那里并且是新鲜的。它甚至会立即显示在数据存储管理中。

标签: google-cloud-firestoreapp-engine-ndb

解决方案


这也被归档为https://github.com/googleapis/python-ndb/issues/666。事实证明,1.9.0 之前的 Cloud NDB 明确要求最终一致的查询。


推荐阅读