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

时间:2019-06-09 19:54:33

标签: firebase flutter google-cloud-firestore listener

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

  

“此外,如果侦听器断开连接超过30分钟(对于   例如,如果用户离线),您将被收取以下费用:   如果您发出了全新的查询”

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

当我们谈论最大时,我们低估了“最小”情况。如果用户每天打开我的应用4次,则可能导致1000次读取,我认为这也很昂贵。

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

我知道我有点滥用Firestore,但是我的数据库每天可能会更改一次,那么为什么每30分钟一遍又一遍地读取每个查询? 作为一名业余开发人员,非常感谢任何想法。

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

2 个答案:

答案 0 :(得分:0)

  

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

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

答案 1 :(得分:0)

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

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

https://link.medium.com/GB4bEvVgUdb