Firestore 读取和缓存

xxJ*_*sxx 5 firebase google-cloud-platform google-cloud-firestore

我试图了解更多有关从服务器读取和从缓存读取以及收费内容的信息。

在对类似问题的回答中,亚历克斯指出:

但是,如果您“一次又一次”执行查询,只要它是相同的查询并且服务器上没有任何更改,那么您将不需要承担任何读取操作的费用。发生这种情况是因为第二次执行查询时,结果来自缓存。

snapshot.metadata.isFromCache当字段仍然存在时,我们如何知道第二个查询(与第一个查询相同)来自缓存false亚历克斯的另一个人在这里表达了类似的想法。

根据道格在这里的评论,他说:

底线是:除非您处于离线状态或明确查询缓存,否则您需要为来自服务器的所有结果付费。

这些似乎是对立的观点。我知道我可以显式查询缓存,这是没有问题的。我只是想了解如果我运行相同的查询 10 次并且每次返回 10 个文档(类似于 Alex 的示例/评论),我将按 100 次读取还是 10 次付费?(假设网络始终可用)。

有什么想法吗?提前致谢。

Ale*_*amo 5

我写了一篇文章,名字叫:

Firestore中没有文档更改时如何大幅减少读取次数?

我在其中解释了有关 Firestore 计费的所有内容。我还添加了一个解决方法,说明如何在数据库中没有更改文档时减少读取次数。

并回答您的问题:

但是,如果您“一次又一次”执行查询,只要它是相同的查询并且服务器上没有任何更改,那么您将不需要承担任何读取操作的费用。

只要(实时)侦听器保持活动状态,这种情况就会发生。

关于第二个答案,如果您正在侦听实时更改并执行第二次查询,则在 30 分钟限制内,结果将始终来自缓存。但是,如果您仅使用 get() 调用,则每次执行此类操作时,您都会像执行全新查询一样付费。

当您处于离线状态时,只要启用了离线持久性(Firestore 中默认启用该功能),您将始终从缓存中读取数据。缓存读取没有成本

如果我运行相同的查询 10 次并且每次返回 10 个文档(类似于 Alex 的示例/评论),我将按 100 次读取还是 10 次付费?

如果您使用 get() 调用,则需要支付 100 次读取费用,但如果您正在侦听实时更新并且侦听器在 30 分钟内未断开连接,则您只需付费10 读。

  • 在我所有的阅读中,我从未意识到有些是关于实时监听器的,而另一些是关于 .get() 的,而且它们是不同的,我很欣赏你的澄清。另外,我很惊讶我从未读过你的文章。感谢您的耐心和宝贵的时间回答! (3认同)