firebase - 是否可以从原子 Firestore 写入中观察到部分变化?
问题描述
Firestore 文档说事务和批量写入都是原子操作 - 要么所有更改都被写入,要么没有任何更改。
这个问题是关于是否可以部分观察到Firestore 中原子操作的变化,或者全有或全无保证是否也适用于读者?
例子:
假设我们有一个 Firestore 数据库,其中至少包含两个文档 X 和 Y。
我们还假设至少有两个客户端(A 和 B)连接到该数据库。
在某个时刻,客户端 A 执行批量写入,同时更新文档 X 和 Y。
随后,客户端 B 读取文档 X 并观察客户端 A 所做的更改。
现在,如果客户端 B 也将读取文档 Y,是否可以保证 A 所做的更改(在同一个批量写入操作中)将被观察到?
(假设没有对这些文件进行其他更改)
我已经对其进行了测试,但从未发现任何不一致之处。然而,仅仅测试这件事是不够的。它归结为 Firestore 在所有情况下(高写入频率、大型数据集、故障转移等)提供的一致性级别
可能的情况是,Firestore 被允许(在有限的时间内)向客户端 B 公开文档 X 的更改,但仍然不公开文档 Y 的更改。这两个更改最终都会被公开。
问题是;它们会作为原子操作公开,还是仅为写入提供这种原子性?
解决方案
我收到了来自 Firebase Google Group 的 Gil Gilbert 的出色回应。
简而言之; Firestore 确实保证读取也是一致的。没有我担心的部分观察结果。
但是,Gil 提到了两种情况,即由于离线缓存和会话处理,客户端无论如何都可以观察到这种不一致。
详情请参阅 Gil 的回复(以上链接)。
推荐阅读
- python - matplotlib 显示奇怪的图表
- azure - Azure AutoML 下载指标
- django - 自定义后端验证成功而不返回用户对象
- pandas - 如何将带有欧洲数字(逗号作为小数分隔符)的多列转换为浮点数?
- spring-boot - 部署在云运行上的 Spring Boot 应用程序从 REST 中的 HTTP 错误中删除“消息”详细信息
- java - Java GUI 程序中的用户输入处理
- pine-script - 检查值是否已经串联
- flutter - 如何修复闪烁(闪烁)的菜单屏幕?
- excel - 在VBA中从上面的单元格复制公式时出现问题
- javascript - 有没有办法重构这个 AND 和 XOR 逻辑分支?