【问题标题】:Tricks to prevent browser listener timeout with Firestore causing excess reads使用 Firestore 防止浏览器侦听器超时导致读取过多的技巧
【发布时间】:2021-05-21 22:06:13
【问题描述】:

我的 Flutter Firestore 应用和网站的用户会监控他们的学校和设施的出勤率。他们通常会全天打开浏览器。

因为他们管理着整个学校,而且由于学生来来去去参加不同的课程,他们全天监控出勤率。我不想通过分页来限制它们的功能,并且需要实时快照侦听器。我也不能使用缓存,因为我需要实时数据,所以我使用 Firestore 在我的应用程序和网站上完全关闭了缓存。数据量少,文档量偏大,累计读取过多。

这主要是因为每 30 分钟,Firestore 会更新侦听器,而这些管理员运行 500 多次读取,每 30 分钟什么都不做......如果他们每天 24 小时都开着电脑。不,我不能要求客户改变行为。

所以我正在寻找一个技巧。有没有办法将其调整为:

  1. 让听众保持活力,而无需重新阅读完整的收藏。
  2. 至少延长时间或完全消除超时,以免我们重新读取。
  3. 我可以假设做一个超时窗口,要求用户在他们回来时刷新......但是,我没有找到任何关于如何暂停侦听器的 flutterfire 或 firebase 文档(我不想弄乱他们的身份验证)。

根据我所看到的一切,Firestore 有这 30 分钟,在石刻刷新。您可以完全注销用户或使用它。不可能是这样的,对吧?有什么想法吗?

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    -> 以某种方式检测不活动(可能只是一个计时器 > 页面上的 5 分钟 => 用户不活动)

    -> 如果用户处于非活动状态,detach the listener 将停止加载数据。

    -> 在 UI 中显示一个按钮,如“更新”或“?”。当用户单击该按钮时,再次运行查询以更新数据。

    几点说明:

    • 一次加载 500 个文档似乎过多。您可能只想显示相关文件,例如“未出现的学生”。但这真的取决于您的具体情况。

    • 完全关闭缓存意味着您可能会弄乱 Firestore 缓存数据的方式,以避免向数据库发出额外请求。在进行实时调用时,Firestore 只对发生变化的文档向您收费(第一次数据库调用除外)。缓存是 Firestore 实时功能的一部分。所以这只是要记住的事情。

    【讨论】:

    • 感谢您的想法...我会尽快调查。对于每个帐户,我有 200-300 个微用户,他们在应用程序上停留 30-60 秒,而在此期间,如果显示昨天的旧缓存数据,则它不起作用。然后在那组用户中,我有 1 或 2 个或者是监控所有这些更新的管理员用户。因此,阅读群体很大,但按比例适用于少数用户。
    【解决方案2】:

    使用像 Redux 这样的框架作为中介——Listeners 向 Redux 发送数据;组件订阅 Redux。这有助于将 UI 与 Firestore 后端分离。我的应用可能有 1000 条可供用户使用的记录,但大多数时候只有那些在视图中处于活动状态的记录。也可以(但我还没有写)通过 Redux 存储以更精细的规模进行分页(因此您可以轻松地“回页”),但在较大页面上通过 Firestore 进行分页,频率较低。

    我还必须质疑为什么您需要“实时”读取 500 条记录 - 不太可能有任何用户实际上查看同时查看 500 条记录。

    【讨论】:

    • 我使用提供者。我觉得我为少数用户确保高功能的解决方案会起作用,但是,30 分钟的刷新对我最好的计划造成了影响……分页使大量的排序和过滤变得复杂。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2011-08-21
    • 1970-01-01
    • 2011-12-16
    • 2019-06-17
    • 1970-01-01
    • 2010-09-18
    • 2021-07-12
    相关资源
    最近更新 更多