【问题标题】:does firebase charge for retrieving docs from firestore js sdk cache从firestore js sdk缓存中检索文档的firebase是否收费
【发布时间】:2019-08-07 17:23:16
【问题描述】:
  • 我使用的是firebase JS SDK,启用了offline persistence。这将自动将我检索到的文档缓存在 JS SDK 中。
  • 我执行此查询:
// once
firebase.firestore().doc('path/to/doc').get()
// twice
firebase.firestore().doc('path/to/doc').get()

我的问题是:

  1. 启用离线持久性的情况下,Firebase 是否会向我收取两次读取费用。因为我相信第二次读取将来自离线缓存而不进行网络调用?
  2. 离线持久性被禁用时,Firebase 会向我收费一次还是两次

我的用例

用户使用来自客户的“任务”打开一个网络应用程序。
每个任务都有一个带有文档参考的client 字段。

  1. 检索所有任务(例如 500 次读取)
  2. 检索每个任务的每个客户端文档(另外 500 次读取,即使某些客户端相同)

所以如果只有 20 个客户端,我宁愿在用户打开应用时只有 520 次读取而不是 1000 次读取。

重新设计我的数据结构以将相关的客户端信息保存在任务本身而不是引用上是否更好,或者 Firebase JS SDK 是否足够聪明,不会重复检索它刚刚检索到的同一个文档。


PS:我在这里发现了一个类似的问题:

Does Firestore charge Cloud Function Get reads per retrieved documents?

但它只是没有我正在寻找的确切信息。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    firebase 是否对从 firestore js sdk 缓存中检索文档收费?

    不,它没有。如果从本地缓存中完成读取,则不会作为服务器端读取收费。

    但是您的代码有两个 get 调用:

    // once
    firebase.firestore().doc('path/to/doc').get()
    // twice
    firebase.firestore().doc('path/to/doc').get()
    

    在这种情况下,Firestore 客户端无法知道文档是否在这两次调用之间发生了更改。所以它必须调用服务器来确定文档是否被更改,这是(或至少可能)收费读取。

    如果您需要了解应用程序中多个位置彼此靠近执行的文档的当前状态(时间方面),您应该在该文档上保留一个onSnapshot 侦听器。这可确保本地缓存始终以最低成本保持最新状态。

    【讨论】:

    • 我描述的“用例”怎么样,我设置了一个侦听器来检索 500 个任务,并且需要将客户端文档保存为每个任务的参考。 (例如 forEach(taskDoc => taskDoc.clientRef.get()) )即使有很多重复的引用并且总共只有 20 个客户,这是否会按 500 次额外读取收费?
    • 如果您执行 500 次 get() 操作,则需要从服务器读取 500 次。但是,如果您为每个唯一的客户端添加一个侦听器,则可以确保您拥有 20 个侦听器和读取的最新数据。
    • 那么你的意思是说如果我这样做:firestore.firebase().collection('tasks/data').onSnapshot(querySnapshot => querySnapshot.forEach(doc => doc.data().clientRef.get())) 而我的 onSnapshot 检索到 500 个任务,而这 500 个任务都执行了doc.data().clientRef.get(),那么我会为 1000 次读取(500 + 500),不管某些clientRefs是否相同? (如果您可以在答案中添加对此的答案,我会标记为正确!抱歉问了很多问题,我想清楚地了解您)
    • 每个get() 都必须检查服务器上的文档是否是最新的,因此对get() 的500 次调用是500 次读取。我在我的回答和上面的评论中都说过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多