【问题标题】:How to prevent Firebase Firestore from unnecessary read operations in a Flutter app?如何防止 Firebase Firestore 在 Flutter 应用中进行不必要的读取操作?
【发布时间】:2019-06-09 19:54:33
【问题描述】:

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

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

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

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

我正在考虑一些解决方案: 1-在打开应用程序时使用某些代码禁用 Flutter 应用程序网络连接的任何方法?例如,如果应用打开时有网络连接,则在接下来的 24 小时内,无论手机网络连接是否打开/关闭,应用都将无法连接互联网。 2- 有什么选择吗?

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

编辑: 3-使用实时数据库+云存储而不是使用带有blob编码图像的Firestore怎么样?我不知道实时数据库是否有一些被动计费方式,例如 Cloud Firestore 中的 30 分钟规则。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore listener


    【解决方案1】:

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

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

    【讨论】:

    • 我正在努力解决与 OP 类似的问题。我们已经成功实现了您的方法,但是如果您使用这种方法,如何知道哪些文档被删除了?
    【解决方案2】:

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

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

    https://link.medium.com/GB4bEvVgUdb

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 2021-07-25
      • 2019-03-13
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2022-01-10
      相关资源
      最近更新 更多