google-cloud-firestore - 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)
如果我通过密钥获得实体,它就在那里并且是新鲜的。它甚至会立即显示在数据存储管理中。
解决方案
这也被归档为https://github.com/googleapis/python-ndb/issues/666。事实证明,1.9.0 之前的 Cloud NDB 明确要求最终一致的查询。
推荐阅读
- ionic-framework - 是否可以在 Ionic 中制作视频通话应用程序?
- signalr - 在 signalR 中未调用 onDisconnected 方法
- javascript - 带计数器的喜欢和不喜欢按钮(仅使用 html javascript php)
- python - 无法将射线演员部署到heroku上的烧瓶应用程序
- distributed-computing - haazelcast Imap 和 ICache 有什么区别?
- java - Hibernate 无法使用 Postgres 在 jpql 中定义空参数
- php - 响应标头上的 xhr 请求中缺少 Cookie
- java - 如何将 JaVers 与 Map 一起使用?
- git - 撤消 git push 并推送到另一个分支
- c - 使用 memmove 函数复制数组的数据