Firestore离线数据:合并写入,最长离线持久化时间

26

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

Firestore如何处理离线数据?

  1. 多个客户端在离线状态下编辑同一份数据,当这些客户端同时重新联机时,数据写入如何合并?

  2. 离线数据会持久化多长时间?如果我的用户在离线状态下使用我的应用五年,然后再次联网,会有问题吗?离线更改会在设备重启后保留吗?

  3. 离线数据的查询性能是否随着数据集的增大而降低?

我特别关注Web Firestore客户端。

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

谢谢。


3
我也非常感兴趣。官方文档中几乎没有关于此的信息,这使得离线功能使用起来非常冒险。 - artur grzesiak
希望我们能从优秀的Firestore工程师那里得到答案。我完全同意你的观点。在我的测试中,我无法依赖Firestore离线功能来处理“文档”和“集合”。此外,似乎本地更新不被视为合法的文档更新,我们需要检查“hasLocalChanges”以重新启动更新过程? - mosn
我已经发布了悬赏,然后发现了https://dev59.com/klUK5IYBdhLWcg3w7DgH。它涵盖了很多相同的内容。 - Duncan Jones
@DuncanJones 请查看我的下面回答。 - Alex Mamo
1个回答

22
多个客户端离线编辑相同数据后,同时上线时如何合并写入?
Firebase服务器上将按照操作发生的顺序执行写入操作。最新的操作将在同步发生时在数据库中可用。
离线数据会被持久化多长时间?如果我的用户离线使用我的应用5年后重新上线,这会成为问题吗?
问题不在于离线数据存储的时间有多长,而是在设备离线期间进行了多少次操作。离线时,Firestore会将所有写操作排队。随着队列的增长,本地操作和应用程序启动将变慢。虽然不是什么大问题,但随着时间的推移,这些问题可能会累积。在这种情况下的主要问题是,最终结果是服务器上的数据保持不变。那么实时数据库的目的是什么呢?Firestore确实被设计为在线数据库,适用于短到中等断开连接的时间段,而不是离线5年。此外,在5年内它可能是兼容性问题而不是写入次数的问题。
设备重新启动后,离线更改是否会持久保存?

离线持久化也被称为磁盘持久化。这种持久性在Cloud Firestore中默认启用,它意味着最近收听的数据(以及应用程序对数据库的任何挂起写入)都会被保留到磁盘上。这个缓存中的数据可以在应用程序重新启动和设备重启后仍然存在。

随着数据集变得越来越大,离线数据的查询性能会下降吗?

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

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

不是。对于iOS和Android,离线功能工作正常,而对于Web,这个功能仍处于实验阶段。


1
它是否理解单个字段在离线状态下被更新?例如,如果我们有一个包含“名称:字符串”和“计数器:数字”的文档。假设我们有两个离线客户端。一个增加计数器,另一个更新名称。当它们同步更改时,文档会反映两个更改,还是只会反映最后一次写操作? - DarkNeuron
2
好的,我刚刚亲自测试了一下,使用了两个离线客户端,结果就是我之前所期望的。这两个客户端仅影响它们更新的字段! - DarkNeuron
@DarkNeuron 是的,会反映出两个更改。 - Alex Mamo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接