如何使用本地缓存并仅使用 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 更新更改的文档?的主要内容,如果未能解决你的问题,请参考以下文章