如何使用本地缓存并仅使用 Firestore 更新更改的文档?

Posted

技术标签:

【中文标题】如何使用本地缓存并仅使用 Firestore 更新更改的文档?【英文标题】:How can I use local cache and only update changed documents using Firestore? 【发布时间】:2021-12-31 13:47:03 【问题描述】:

我正在开发一个日历应用程序,目前正在从 firestore 获取数据以填充日历。最终,会有很多数据要获取,我试图了解 Firestore 的缓存系统,但无法理解它。 我理想中想要达到的目标:

始终使用缓存数据并仅更新那些新的、已编辑或已删除的文档。

我将如何做到这一点?

【问题讨论】:

每当您向 Firestore 集合添加观察者时,您都会看到该集合的初始数据。这使您能够使用新数据填充您的 UI。然后,Firestore 将显示更改的数据(添加、更改或删除),以便您可以实时更新您的 UI。无需使用或缓存数据 我实际上想使用缓存来防止大量读取,因为将来某个时候我会得到相当多的数据。我目前正在使用 onSnapshot,它工作得非常好,但它在某些时候我担心的读取量。 您可以向侦听器函数添加查询。读取数据时,存储发生时间的时间戳。下次读取数据时,仅在该时间戳之后添加一个侦听器。那么您将只查看“新”数据。 【参考方案1】:

如果要强制SDK从缓存中读取,可以specify source options when calling get()

如果您发现自己到处都在这样做,考虑使用 Firestore 以外的其他数据库可能是有意义的,因为它主要是一个在线、云托管的数据库,在您暂时离线时可以继续工作。

【讨论】:

感谢您的回答。我实际上想从缓存中读取应用程序的一部分(日历部分),因为在某些时候会有很多数据。为了节省读取成本,我想从缓存中加载,只更新实际编辑、添加或删除的文档。我猜其他日历应用也有同样的方法。 还没有完全回答。我知道我可以使用“get()”并指定源,但是这样做不会更新任何更改的文档。就我而言,我想知道是否可以将“get()”与源“缓存”和一个侦听器结合起来,以更新任何更改、新文档或已删除的文档。当我打开一个日历应用程序时,例如谷歌日历,我可以立即看到我的所有数据和一个加载图标,加载后的更改将可见。我不想每次打开应用程序时都获取所有数据。 您在寻找***.com/…吗? 嘿@CrypticalMindz 你在这方面有什么进展吗? 嘿@Frank,我真的没有。我将很快对该应用程序进行 Beta 测试,并将了解获取数据的行为方式。根据不同的文档,使用firebase时获取的数据会自动持久化。然后,已知的 onSnapshot 将检查刚刚更新的数据。我无法确认是否是这种情况。我会尽快发现并通知您!感谢您的提问。

以上是关于如何使用本地缓存并仅使用 Firestore 更新更改的文档?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上使用 Firestore 的缓存策略

Firestore - 使用缓存直到在线内容更新

将本地 Firestore 缓存与服务器显式同步

Firestore:仅当有更新时才从服务器获取数据,否则从缓存中获取

Flutter:如何使用 Firestore 检查连接性

在本地运行 Firestore,例如供测试用