首页 > 解决方案 > 是否可以从原子 Firestore 写入中观察到部分变化?

问题描述

Firestore 文档说事务和批量写入都是原子操作 - 要么所有更改都被写入,要么没有任何更改。

这个问题是关于是否可以部分观察到Firestore 中原子操作的变化,或者全有或全无保证是否也适用于读者?


例子:

假设我们有一个 Firestore 数据库,其中至少包含两个文档 X 和 Y。

我们还假设至少有两个客户端(A 和 B)连接到该数据库。

在某个时刻,客户端 A 执行批量写入,同时更新文档 X 和 Y。

随后,客户端 B 读取文档 X 并观察客户端 A 所做的更改。

现在,如果客户端 B 也将读取文档 Y,是否可以保证 A 所做的更改(在同一个批量写入操作中)将被观察到?

(假设没有对这些文件进行其他更改)


我已经对其进行了测试,但从未发现任何不一致之处。然而,仅仅测试这件事是不够的。它归结为 Firestore 在所有情况下(高写入频率、大型数据集、故障转移等)提供的一致性级别

可能的情况是,Firestore 被允许(在有限的时间内)向客户端 B 公开文档 X 的更改,但仍然不公开文档 Y 的更改。这两个更改最终都会被公开。

问题是;它们会作为原子操作公开,还是仅为写入提供这种原子性?

标签: firebasegoogle-cloud-firestoreconsistency

解决方案


我收到了来自 Firebase Google Group 的 Gil Gilbert 的出色回应

简而言之; Firestore 确实保证读取也是一致的。没有我担心的部分观察结果。

但是,Gil 提到了两种情况,即由于离线缓存和会话处理,客户端无论如何都可以观察到这种不一致。

详情请参阅 Gil 的回复(以上链接)。


推荐阅读