【问题标题】:How to reduce amount of data being transmitted in Firebase Realtime Database?如何减少 Firebase 实时数据库中传输的数据量?
【发布时间】:2021-10-06 08:48:27
【问题描述】:

我正在使用 Google Cloud Firebase 实时数据库来存储消息。消息保存在

users/$userID/messages/$topic[0..n]/message[0..n]

我使用的是官方的 JS 库AngularFire。我正在通过以下代码收听新消息:

this.observable = this.db.list(`users/${user.uid}/topics/${topic}/`).valueChanges();

我现在可以订阅 observable。假设用户在给定主题中有 100 万条消息。每当我添加一条新消息时,我都会在回调中收到 100 万条消息。

我的问题是,如果我修改或添加新消息,实际在后台传输了多少数据?我知道图书馆保留了数据库的本地副本。

最重要的是,我如何找出哪条消息被修改了?还是我需要自己解决这个问题?

【问题讨论】:

    标签: javascript firebase-realtime-database angularfire2


    【解决方案1】:

    如果您有一个现有的侦听器,并且添加了一条新消息,则只有该新消息会发送到该客户端。您可以通过查看浏览器开发人员工具的网络选项卡中的网络套接字流量来轻松验证这一点。

    但我会建议 use a query and limit 减少检索到的消息数量,因为任何用户似乎都不太可能阅读 100 万条消息,而且检索(比用户看到的)更多的数据是一种浪费。

    根据querying lists 上的 AngularFire 文档,应该是这样的:

    this.db.list(`users/${user.uid}/topics/${topic}/`, 
      ref => ref.orderByKey().limitToLast(20)
    ).valueChanges()
    

    【讨论】:

    • 谢谢!这很有帮助。只是为了完整起见,如果有人有 100 万条消息但要删除 message1,我仍然会收到此更新吗?
    • 我想是的。但请检查开发人员工具以确保。
    • 我刚查了一下,没有触发。但是您的回答对我来说非常棒,谢谢!
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多