Firestore脱机数据:合并写入,脱机持久性的最长时间

时间:2017-11-04 13:18:46

标签: firebase google-cloud-firestore

https://firebase.google.com/docs/firestore/manage-data/enable-offline

Firestore如何使用离线数据?

  1. 许多客户如何合并离线编辑相同数据的写入,然后同时联机?

  2. 离线数据有多长时间了?如果我的用户离线使用我的应用程序5年,然后重新上线,这是一个问题吗?设备重启后,离线更改是否仍然存在?

  3. 当数据集变大时,离线数据的查询性能是否会降低?

  4. 我对网络Firestore客户端特别感兴趣。

    所有语言客户端是否都以相同的方式实现上述目标?

    感谢。

3 个答案:

答案 0 :(得分:5)

  

许多客户端如何合并脱机编辑离线编辑相同数据,然后同时联机的数据?

将在Firebase服务器上进行的写操作将按照该系列操作发生的顺序进行。最后一个操作(最新操作)将是在同步发生时在数据库中可用的操作。

  

离线数据可以保留多长时间?如果我的用户离线使用我的应用程序已有5年,然后又重新上线了,这会成为问题吗?

问题不在于设备离线时进行多少次操作。离线时,Firestore将使所有写操作排入队列。随着此队列的增加,本地操作和应用启动将变慢。没什么大不了的,但是随着时间的流逝,这些可能加起来。在这种情况下的主要问题是,最终结果将是服务器上的数据保持不变。那么,实时数据库的目的是什么? Firestore实际上是作为在线数据库设计的,可以在断开连接的短期到中期工作,而不是保持离线状态长达5年。除此之外,在5年内可能是兼容性问题,而不是写入次数问题。

  

重启设备后,离线更改是否仍然存在?

脱机持久性也称为磁盘持久性。默认情况下,Cloud Firestore中启用了这种类型的持久性,这意味着最近侦听的数据(以及从应用程序到数据库的所有挂起的写操作)都将持久化到磁盘。此缓存中的数据在应用程序重启和设备重启后仍然有效。

  

离线数据的查询性能会随着数据集的增大而降低吗?

是的,就像上面解释的那样。

  

所有语言客户端是否都以相同的方式实现上述目的?

不。对于iOS和Android,离线功能可以正常工作,而对于网络,此功能仍处于试验阶段。

答案 1 :(得分:0)

1)多个客户端应在单个Web浏览器中表现相同的多个选项卡。

  

对于网络,离线持久性是一项实验性功能,仅Chrome,Safari和Firefox网络浏览器支持。此外,如果用户打开多个指向同一Cloud Firestore数据库的浏览器选项卡,并且启用了脱机持久性,则Cloud Firestore仅在第一个选项卡中正常工作

2)文档没有明确说明数据保留期是多长,而我假设这应该是应用程序卸载(或清除Web浏览器中的本地存储/缓存) - 重新启动设备/浏览器应该没有任何问题(除非它在退出时或在注销时不会清除本地缓存,例如,可能在浏览器信息亭模式下或在公共计算机上)。

3)因此这是基于noSQL的,当记录/文档数量增长太大时(没有查询缓存,类似于普通的数据库服务器都有),性能会受到影响。

禁用离线持久性和手动同步可能(虽然此功能仍处于测试阶段)提供了对如何/正在同步回云的更多控制 - 与假设只有一个客户端相比。他们可能仍然会改进这一点,一旦此功能被认为是稳定的,可能会更新文档。使用transactions似乎最有可能在那里有意义; RPC API文档内容为google.firestore。 v1beta1 (用于直接访问,而不是使用库)。

答案 2 :(得分:0)

我想文档中有大多数答案。 link

  1. 写操作是基于时间戳进行的。
  2. 根据您的指定,您对Web Firebase客户端感兴趣。在这种情况下,我想您可能无法在浏览器重启后访问离线数据。如果不是这种情况,Firebase应该能够管理写入。我没有找到任何具体的时间限制。但是,文档说
  

Firebase应用程序可以正常工作,即使您的应用程序暂时失去网络连接也是如此。此外,Firebase还提供了用于在本地持久存储数据,管理状态和处理延迟的工具。

这意味着数据持久性肯定是在有限的时间段内。

  1. 是的,如果操作太多,系统会将所有写入同步到云的系统将具有更大的负载。

希望这会有所帮助。另请参阅this link