首页 > 解决方案 > 如何减少 Firebase 实时数据库中传输的数据量?

问题描述

我正在使用 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 万条消息。

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

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

标签: javascriptfirebase-realtime-databaseangularfire2

解决方案


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

但我建议使用查询和限制来减少检索到的消息数量,因为似乎任何用户都不太可能阅读 100 万条消息,而且检索(比用户看到的)更多的数据是一种浪费。

根据关于查询列表的 AngularFire 文档,应该是这样的:

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

推荐阅读