【问题标题】:Does Firestore snapshost() listeners do an initial document read every data every time the app restarts?Firestore snapshots() 监听器是否会在每次应用重新启动时读取每个数据的初始文档?
【发布时间】:2021-05-01 20:15:56
【问题描述】:

使用firestoresnapshot() 并设置侦听器时,Cloud Firestore 会向您的侦听器发送数据的初始快照,然后在每次文档更改时发送另一个快照。

但是,如果我关闭应用程序并重新打开它,firestore 是否会读取它已经查询过的所有数据,或者是否存在内部同步系统(例如,如果他们存储文档元数据,例如 updatedAt 他们只能阅读自 x) 以来未更新的文档?

换句话说。如果我使用onSnapshot() 监听器,我将首先读取 x 个文档,然后每次文档更改时读取 1 个文档。我的问题是:如果我关闭应用程序并且文档发生更改,那么当我打开应用程序时,是 1 read made 还是 x + 1 ?

这对我来说很重要,因为我有很多初始电话,我想知道这会如何影响成本 ($)。

了解数据建模及其对成本的影响也很重要。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    每次您对服务器执行新查询(这是默认设置)时,都需要读取一次,并且必须传输文档。除非没有连接,否则它不会使用缓存,或者您专门针对查询的缓存。退出并返回应用完全不会改变这种行为。

    我建议阅读:https://medium.com/firebase-developers/firestore-clients-to-cache-or-not-to-cache-or-both-8f66a239c329

    【讨论】:

    • 这篇文章并没有真正回答这个问题。当您有一个侦听器和 1 个文档更改时,您将只有 1 个读取。如果您设置了一个初始侦听器,您将读取 X 文档(取决于最初返回的数量)+ 1 读取每个文档更改。但是,如果您过去在关闭应用程序之前已经设置了一个侦听器,则不清楚它是否重新读取了初始数据集。他们可以很好地使用同步元数据来做到这一点,就像它通常在离线第一个数据库中完成一样。
    • 换句话说。如果我使用snapshots 监听器,我最初会收到 x 个文档,然后每次文档更改时都会收到 1 个文档。我的问题是:如果我关闭应用程序并更改 1 个文档,那么当我打开应用程序时,是 1 个已读还是 x + 1 ?
    • 我在这里借用了你的答案:softwareengineering.stackexchange.com/a/421573/148725
    • 更多快照监听器不允许您提供源。所以这篇文章与我的问题有点无关。虽然它似乎回答了乔纳森的问题,所以这很好。
    • 这篇文章不是为了回答这个问题——这里提供的文字回答了这个问题。提供这篇文章是为了添加有关缓存系统实际工作方式的信息,因为这是唯一可以防止每次进行查询时读取成本的方法。我不清楚你所说的“x + 1”是什么意思。文档读取只是一个简单的读取操作。它并不比这更复杂。文档不保留导致更多读取发生的历史记录。他们只有当前状态。
    【解决方案2】:

    这取决于监听器的类型

    OnChange() 只会在数据变化时读取

    addListenerForSingleValueEvent 只会检查一次,如果是onCreate 部分会立即执行

    addValueEventListener 会不断检查,但如果数据发生变化,则会记录为只读

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 1970-01-01
      • 2019-12-27
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多