【问题标题】:Is it possible to add only new documents to Cloud Firestore cache?是否可以仅将新文档添加到 Cloud Firestore 缓存?
【发布时间】:2020-04-14 15:22:58
【问题描述】:

我有一个应用程序,每天读取 50k 到 60k 文档,我现在负担不起另一个计划,所以我正在寻找一种优化读取的方法,尽可能减少读取次数。

该数据库有 4 个集合和一些子集合,我想整个服务器中可能有大约 1000 个文档。

无论如何它都在那里:我可以从云 Firestore 读取文档(用户第一次打开应用程序时)并存储在 Firestore 缓存中,之后,使应用程序仅从 Firestore 缓存加载数据,如果有新的文档,它只读取这些文档,存储到缓存中,并继续从缓存中读取?

如果可能,该应用只能从缓存中加载数据(使用参数“source”),而不能直接从 Firestore 中加载。

Firestore.instance.collection("images").getDocuments(source: Source.cache);

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    是否存在:我可以从云 Firestore 读取文档(用户第一次打开应用程序时)并存储在 Firestore 缓存中

    这是默认行为。根据Firestore offline persistence的官方文档:

    • 对于 Android 和 iOS,默认情况下会启用离线持久性。要禁用持久性,请将 PersistenceEnabled 选项设置为 false。

    • 对于 Web,默认情况下禁用离线持久性。要启用持久性,请调用 enablePersistence 方法。 Cloud Firestore 的缓存不会在会话之间自动清除。因此,如果您的网络应用处理敏感信息,请务必在启用持久性之前询问用户他们是否使用受信任的设备。

    所以你不需要做任何特别的事情。一旦您在其中一个集合上打开流,数据就会添加到缓存中。

    之后,让应用只从 Firestore 缓存中加载数据,如果有新文档,它只读取这些文档,存储到缓存中,并继续从缓存中读取?

    这又是默认行为,但只要您的数据库中的文档没有更改,它就可以工作。如果数据库中的文档发生更改,您将需要为每个文档读取一个文档。机制是一样的。

    除此之外,您可以告诉 Firestore 仅在需要时从缓存中读取数据,如以下帖子的答案中所述:

    【讨论】:

    • 但是对于 StreamBuilder(snapshots) 和 FutureBuilder(getDocuments) 是否只更新新文档?
    • 是的,机制相同。
    • 我问是因为看起来我们在使用 StreamBuilder 时不能使用参数“缓存”,“.snapshot()”,只有 FutureBuilder(.getDocuments(source: ?)) 有。
    • 我指的是计费部分。是的,在StreamBuilder 的情况下,您无法使用参数“缓存”。当您侦听实时更新时,您正在侦听服务器上更改的文档。获得一些更新后,所有文档都会缓存在用户的设备上。
    • 如果您离线,将创建一个本地副本,并且在您离线时完成的任何数据库写入都将在您再次在线时同步。但随后仍会从服务器检索数据
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多