firebase从firestore js sdk缓存检索文档是否收费 我使用的是firebase JS SDK,已启用。这将自动在JS SDK中缓存检索到的文档 我执行以下查询: //一次 firebase.firestore().doc('path/to/doc').get() //两次 firebase.firestore().doc('path/to/doc').get() 我的问题是: 如果启用了脱机持久性,Firebase会向我收取两次读取的费用吗。因为我相信第二次读取将来自离线缓存,而无需进行网络调用 禁用脱机持久性时,Firebase会向我收取一次或两次费用吗 我的用例

firebase从firestore js sdk缓存检索文档是否收费 我使用的是firebase JS SDK,已启用。这将自动在JS SDK中缓存检索到的文档 我执行以下查询: //一次 firebase.firestore().doc('path/to/doc').get() //两次 firebase.firestore().doc('path/to/doc').get() 我的问题是: 如果启用了脱机持久性,Firebase会向我收取两次读取的费用吗。因为我相信第二次读取将来自离线缓存,而无需进行网络调用 禁用脱机持久性时,Firebase会向我收取一次或两次费用吗 我的用例,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,用户通过客户端的“任务”打开web应用程序。 每个任务都有一个带有文档引用的客户机字段 检索所有任务(例如500次读取) 每个任务检索每个客户机文档(即使某些客户机相同,也要读取500次) 因此如果只有20个客户端,我宁愿在用户打开应用程序时只有520次读取,而不是1000次读取 重新设计我的数据结构,将相关的客户机信息保存在任务本身而不是引用上,是更好,还是Firebase JS SDK足够聪明,不会重复检索刚刚检索到的同一个文档 PS:我在这里发现了一个类似的问题: 但它没有我想要的确切

用户通过客户端的“任务”打开web应用程序。
每个任务都有一个带有文档引用的
客户机
字段

  • 检索所有任务(例如500次读取)
  • 每个任务检索每个客户机文档(即使某些客户机相同,也要读取500次)
  • 因此如果只有20个客户端,我宁愿在用户打开应用程序时只有520次读取,而不是1000次读取

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


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

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

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

    不,没有。如果从本地缓存执行读取,则不会将其作为服务器端读取进行收费

    但是您的代码有两个
    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)的费用,而不管某些clientRef是否相同?(如果你能在回答中添加此问题的答案,我将标记为正确!很抱歉问了这么多,我想让你明白)每个
    get()
    都必须检查服务器上的文档是否是最新的,因此对
    get()
    的500次调用是500次读取。我在回答和上面的评论中都说过。
    // once
    firebase.firestore().doc('path/to/doc').get()
    // twice
    firebase.firestore().doc('path/to/doc').get()