【问题标题】:Firestore onSnapshot - how to tell which individual fields changed?Firestore onSnapshot - 如何判断哪些单独的字段发生了变化?
【发布时间】:2018-05-31 16:44:57
【问题描述】:

我正在对数据进行建模,并且对onSnapshot(网络)监听器有疑问。正如在 SO 和文档中的几篇文章中指出的那样,在初始调用之后,侦听器仅获取更改的数据。我很想知道更改的数据是什么。如果监听一个文档,是获取的只是字段还是整个文档?

如果我们在 Document 上有一个侦听器,并且该文档上的字段值发生更改(或者添加或删除了一个字段),是否只获取该字段?换句话说,这是否类似于在 RTDB 中的节点上放置 child_changed/added/removed 侦听器?

目的是确定我是否应该在 RTDB 或 Firestore 中保持频繁更改客户必须收听的文档。如果可能的话,我不希望将整个文档重新发送给客户端,因为只有字段更改。

示例。我们有以下文件:

rando_id:
  field1
  field2
  field3

如果field2 的值发生变化,是否只有field2 是从Firestore DB 传输到客户端的数据?这同样适用于添加field4 或删除field1。是否只会将这些字段发送给客户端?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    Firestore 中的存储单位是文档。没有更细粒度的方式来传输数据。没有 API 可以告诉您文档中究竟发生了什么变化 - 如果可用,您必须使用先前的快照来确定自己。您也不能在安全规则中定位文档字段。对于 Firestore 中的文档,要么全有,要么全无。

    【讨论】:

    • 查看 Firestore 带宽费率,似乎定价与完整文档提取无关。与延迟相关的文档大小似乎是唯一需要考虑的问题,但即使这样也显得微不足道。
    • 您还可以重组数据,以便更频繁的字段存在于不同集合中的文档中。
    • 刚刚与另一位工程师进行了确切的讨论 :) 还考虑使用 rtdb 来促进更频繁的更新。 EG 我们将聊天数据保存在 rtdb 中,因为读取操作次数较多
    • 这也是一个常见的替代方案,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多