Firestore 读取和缓存
我试图更多地了解从服务器读取和从缓存读取以及什么是可计费的。
在这个类似问题的回答中,Alex 指出:
However, if you perform a query, "again and again", as long as it's the same query and nothing has changed on the server, then you will not be charged with any read operations. This is happening because the second time you perform the query, the results are coming from the cache.
当
snapshot.metadata.isFromCache
字段仍然为
false
时,我们如何知道第二个查询(与第一个查询相同)来自缓存? Alex 的另一个帖子在
此处
中表达了类似的想法。
根据 Doug 在评论 此处 中的说法,他表示:
The bottom line is this: unless you are offline or querying the cache explicitly, you are charged for all results that come from the server.
这些似乎是对立的观点。我知道我可以明确查询缓存,这不是问题。我只是想知道,如果我运行相同的查询 10 次,每次都返回 10 个文档(类似于 Alex 的示例/评论),我会为 100 次读取还是 10 次读取付费? (假设网络始终可用)。
有什么想法吗?提前致谢。
我写了一篇文章,名为:
How to drastically reduce the number of reads when no documents are changed in Firestore?
其中我解释了有关 Firestore 计费的所有内容。我还添加了一种解决方法,说明如何在数据库中没有文档更改时减少读取次数。
回答您的问题:
However, if you perform a query, "again and again", as long as it's the same query and nothing has changed on the server, then you will not be charged with any read operations.
只要(实时)侦听器保持活动状态,就会发生这种情况。
关于第二个答案,如果您正在侦听实时更改并在 30 分钟限制内执行第二个查询,结果将始终来自缓存。但是,如果您仅使用 get() 调用,那么每次执行此类操作时,您都会像执行全新查询一样被计费。
当您处于离线状态时,只要您启用了 Firestore 中默认启用的离线持久性,您就会始终从缓存中读取数据。缓存读取 无 成本。
if I run the same query 10 times and 10 documents are returned each time (similar to Alex's example/comment) will I be charged for 100 reads or 10?
如果您使用 get() 调用,则需要为 100 次读取付费,但如果您正在监听实时更新,并且监听器在 30 分钟内未断开连接,则只需为 10 次读取付费。