Firebase负责从Firestore JS SDK缓存中检索文档

时间:2019-03-17 00:23:32

标签: firebase google-cloud-firestore

  • 我正在使用启用了offline persistence的firebase JS SDK。这将自动将我检索到的文档缓存在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?

但是它只是没有我想要的确切信息。

1 个答案:

答案 0 :(得分:2)

  

从Firestore JS SDK缓存中检索文档需要Firebase收费吗?

不,不是。如果从本地缓存中完成读取,则不会将其计为服务器端读取。

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

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

在这种情况下,Firestore客户端无法知道在这两个调用之间是否更改了文档。因此,它必须调用服务器以确定文档是否已更改,该文档是(或至少是 )收费记录。

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