Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Firebase Firestore在颤振应用程序中进行不必要的读取操作?_Firebase_Flutter_Google Cloud Firestore_Listener - Fatal编程技术网

如何防止Firebase Firestore在颤振应用程序中进行不必要的读取操作?

如何防止Firebase Firestore在颤振应用程序中进行不必要的读取操作?,firebase,flutter,google-cloud-firestore,listener,Firebase,Flutter,Google Cloud Firestore,Listener,所以在我的Firestore数据库中,我有大约2000个包含图像(blob)的文档,其中包含一些标签,用于对它们进行分组、排序和在本地设备上搜索。在我的应用程序中,图像存储在本地SQLFlite数据库中,用户可以脱机查看它们,Firestore脱机持久性也已启用。当设备网络连接打开时,firestore listener会再次读取我的所有查询,因为我的应用程序会根据我用于分类图像的标记显示我的图像,即使我的firestore db中没有任何更改。主要原因是30分钟规则: “此外,如果侦听器断开连

所以在我的Firestore数据库中,我有大约2000个包含图像(blob)的文档,其中包含一些标签,用于对它们进行分组、排序和在本地设备上搜索。在我的应用程序中,图像存储在本地SQLFlite数据库中,用户可以脱机查看它们,Firestore脱机持久性也已启用。当设备网络连接打开时,firestore listener会再次读取我的所有查询,因为我的应用程序会根据我用于分类图像的标记显示我的图像,即使我的firestore db中没有任何更改。主要原因是30分钟规则:

“此外,如果侦听器断开连接的时间超过30分钟(例如 例如,如果用户脱机),您将按以下方式收取读取费用: 如果您发布了一个全新的查询“

因此,当我的本地数据库和firestore数据库没有变化时,在最坏的情况下,每30分钟就要对我的图像标签引起的所有查询收费,这可能会导致用户最多读取10000次

当我们谈论最大值时,我们低估了“最小”情景。若用户每天打开我的应用程序4次,可能会导致1000次阅读,我认为这也是很昂贵的

我正在考虑一些解决办法: 1-在打开应用程序时,有没有办法用一些代码禁用颤振应用程序网络连接?例如,如果在应用程序打开时存在网络连接,则在接下来的24小时内,无论是否打开/关闭电话网络连接,该应用程序都将无法连接互联网。 2-有其他选择吗

我知道我有点误用Firestore,但我的数据库可能每天都会更改一次,所以为什么每30分钟就要一遍又一遍地阅读每个查询? 作为一个业余开发者,任何想法都是值得赞赏的,非常感谢

EDİT: 3-如何使用实时数据库+云存储,而不是使用Firestore和blob编码图像?我不知道实时数据库是否有一些被动的计费方式,比如云Firestore中的30分钟规则

我的数据库可能会一天更改一次,那么为什么要在每30分钟内一遍又一遍地读取每个查询呢


好问题。那么,为什么不在应用程序状态中存储上次请求的数据的时间戳,然后在应用程序重新启动时只存储自那时起创建/修改的请求数据呢?

我也遇到了这个问题。每次重新连接快照时,都会对读取进行收费。如果一个集合中有1000个文档,并且用户每天打开和关闭应用程序几次,这很快就会累积起来

我发现这更详细地解释了建议的答案,但我正试图了解如何仅使用新修改的数据更新缓存数据


我正面临着与OP类似的问题。我们已经成功地实现了您的方法,但如果您使用此方法,您如何知道哪些文档被删除?