如何减少 Firebase 实时数据库中传输的数据量?
How to reduce amount of data being transmitted in Firebase Realtime Database?
我正在使用 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 万条消息。
我的问题是,如果我修改或添加一条新消息,实际上在幕后传输了多少数据?我知道图书馆保留了数据库的本地副本。
最重要的是,我如何找出修改了哪条消息?还是我需要自己解决这个问题?
如果您有一个现有的侦听器,并且添加了一条新消息,则只会将该新消息发送到该客户端。您可以通过查看浏览器开发人员工具的网络选项卡中的 Web 套接字流量来轻松地自行验证这一点。
但我建议 use a query and limit 减少检索的消息数量,因为似乎任何用户都不太可能阅读 100 万条消息,而且检索比用户看到的(多)多的数据是一种浪费.
根据 querying lists 上的 AngularFire 文档,应该类似于:
this.db.list(`users/${user.uid}/topics/${topic}/`,
ref => ref.orderByKey().limitToLast(20)
).valueChanges()
我正在使用 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 万条消息。
我的问题是,如果我修改或添加一条新消息,实际上在幕后传输了多少数据?我知道图书馆保留了数据库的本地副本。
最重要的是,我如何找出修改了哪条消息?还是我需要自己解决这个问题?
如果您有一个现有的侦听器,并且添加了一条新消息,则只会将该新消息发送到该客户端。您可以通过查看浏览器开发人员工具的网络选项卡中的 Web 套接字流量来轻松地自行验证这一点。
但我建议 use a query and limit 减少检索的消息数量,因为似乎任何用户都不太可能阅读 100 万条消息,而且检索比用户看到的(多)多的数据是一种浪费.
根据 querying lists 上的 AngularFire 文档,应该类似于:
this.db.list(`users/${user.uid}/topics/${topic}/`,
ref => ref.orderByKey().limitToLast(20)
).valueChanges()