Firestore作为离线持久性机制的可靠性如何?

时间:2017-12-11 03:40:13

标签: android firebase persistence google-cloud-firestore android-room

我目前正在使用Firebase Firestore作为主要后端,从各种来源检索数据。我也使用Android的房间用于我的移动后端。当手机接收到数据时,如果用户几周甚至几周没有再次上线,它就会存储在房间数据库中。

查看设备文件后,我看到firestore将数据保存在/data/data/<your-app>/databases目录下的文件中。

enter image description here

该文件看起来像这样 enter image description here

我已经阅读了firestore上的脱机持久性文档,并且没有迹象表明脱机持久性是多么持久。它提到数据被缓存但不是多长时间。我的问题是,Firestore的离线持久性的持久性是多少。是否会建议使用它而不是使用完全成熟的本地数据库来存储可能无法在很长一段时间(几天,几周)内同步的数据?

一旦重新建立连接,它似乎已经很好地处理了同步数据。我只是担心在某些时候该文件可能会被系统删除而用户会丢失所有内容。

2 个答案:

答案 0 :(得分:15)

在Android上(撰写本文时),Firestore使用SQLite作为持久性机制。因此,对于间歇性的离线活动,您应该没有性能或耐用性问题。

但是,如果您要离线数天或数周(正如您所说),您应该注意以下事项:

<强>性能

由于Cloud Firestore主要用于联机,因此尚未同步到服务器的挂起写入将保留在队列中。如果您在没有联机解决问题的情况下执行许多挂起写入操作,那么该队列将会增长并且会降低整体读/写性能。大多数Cloud Firestore的性能保证来自后端的索引和复制,但是当您仅在线下操作时,大多数优化都不存在。

<强>冲突

Firestore的基本冲突解决模型是&#34;最后写入胜利&#34;。因此,如果您有许多离线客户端写入同一文档,则只有最后一个联机客户端实际上会赢得&#34; win&#34;并坚持他们的改变。

功能

大多数Firestore的功能都脱机工作,但有一个主要的例外:事务。交易只能在您上线时执行。因此,如果您的应用使用了交易,如果没有特殊处理,它将无法正常离线。

答案 1 :(得分:3)

官方文档中没有迹象表明离线持久性是多么持久,因为无法预测。这个问题不能得到确切的答案,比如4周或类似的事情,因为它取决于你离线时发生的写操作次数。

我建议您将Firestore用作仅限脱机的数据库。它真正被设计为一个在线实时数据库,可以在短时间内中断工作。

离线时,它会保留所有写入操作的队列。随着此队列的增长,本地操作和应用程序启动将变慢。但是您需要知道即使重新启动设备,这些操作也会持续存在。你不会丢失任何数据。