是否可以仅将新文档添加到Cloud Firestore缓存?

时间:2019-12-23 10:21:07

标签: firebase flutter dart google-cloud-firestore

我有一个应用程序每天读取5万至6万个文档,而我现在负担不起其他计划,所以我正在寻找一种优化读取的方法,以尽可能减少读取。

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

仍然存在:我可以从Firestore云中读取文档(用户首次打开应用程序)并将其存储在Firestore缓存中,然后,使该应用程序仅从Firestore缓存中加载数据,如果有新的文档,它仅读取这些文档,存储到缓存中,并继续从缓存中读取内容?

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

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

1 个答案:

答案 0 :(得分:1)

  

仍然存在:我可以从Cloud Firestore中读取文档(用户首次打开应用程序时)并将其存储在Firestore缓存中

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

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

  •   
  • 对于Web,默认情况下禁用脱机持久性。要启用持久性,请调用enablePersistence方法。会话之间不会自动清除Cloud Firestore的缓存。因此,如果您的Web应用程序处理了敏感信息,请确保在启用持久性之前先询问用户是否在受信任的设备上。

  •   

因此,您无需执行任何特殊操作。在其中一个集合上打开流后,数据将添加到缓存中。

  

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

这仍然是默认行为,但是只要不更改数据库中的文档,此方法就起作用。如果数据库中的文档发生了更改,您将需要为每个文档读取一个文档。机制是相同的。更改后的文档将被写入缓存,以后所有的读取都将从那里进行,而无需任何其他费用。

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