Firestore 持久性到底如何运作?

A. *_*ano 6 android synchronization firebase google-cloud-firestore

我在文档中读到了这一点:

要使用离线持久性,您无需对用于访问 Cloud Firestore 数据的代码进行任何更改。启用离线持久化后,Cloud Firestore 客户端库会自动管理在线和离线数据访问,并在设备恢复在线时同步本地数据。

...

对于 Android 和 iOS,默认启用离线持久性。要禁用持久性,请将该PersistenceEnabled选项设置为false

在 Android 中,我创建了 Firestore 参考,如下所示:

final FirebaseFirestore db = FirebaseFirestore.getInstance();
Run Code Online (Sandbox Code Playgroud)

我假设默认情况下启用持久性。

我将尝试用这张图片解释发生了什么:

数据库的控制台视图

A

  • 我昨天添加了这个文档,用设备在线可以正常阅读。
  • 今天我可以在设备离线的情况下阅读这篇文档。

B

  • 昨天我也添加了这个文件。该设备在本文档存在后就在线,但我没有阅读它。它已添加但从未阅读。
  • 今天,在设备离线的情况下,我尝试阅读此文档,但无法阅读。(为什么设备在线时没有同步?)

C

  • 昨天我可以访问 collection 6、 document 03000503,但是整个集合没有启用持久化?
  • 那么当我添加文档时03030501,该文档在设备在线时并没有与设备同步?如果我在线时没有读过一次文档,则不会同步,并且同步不是针对集合中的所有文档6
  • 6在线添加文档时采集是否可以同步?

这是我阅读文档的代码:

final FirebaseFirestore db = FirebaseFirestore.getInstance();
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

Firebase 不会自动在设备上缓存数据库中的所有数据。它的磁盘持久性仅将客户端已请求的数据存储在其本地数据库中。

从您链接的同一文档页面:

此功能会缓存您的应用正在使用的Cloud Firestore 数据的副本,以便您的应用可以在设备离线时访问该数据。

如果您考虑一下,这是有道理的:如果 Firebase 会同步您的用户可能看到的所有数据,那么它可能必须同步整个数据库。这在移动设备上是不合理的。

如果您希望特定数据可离线使用,请确保在设备仍处于在线状态时将观察附加到该数据。