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

mes*_*eeb 4 firebase google-cloud-firestore

  • 我正在使用 firebase JS SDK,并启用了离线持久性。这将自动将我检索到的文档缓存在 JS SDK 中。
  • 我执行这个查询:
// once
firebase.firestore().doc('path/to/doc').get()
// twice
firebase.firestore().doc('path/to/doc').get()
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

我的用例

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

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

因此,如果只有 20 个客户端,那么当用户打开应用程序时,我宁愿只有 520 次读取而不是 1000 次读取。

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


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

Firestore 是否对每个检索到的文档收取 Cloud Function Get 读取费用?

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

Fra*_*len 6

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

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

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

// once
firebase.firestore().doc('path/to/doc').get()
// twice
firebase.firestore().doc('path/to/doc').get()
Run Code Online (Sandbox Code Playgroud)

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

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