【问题标题】:Firebase query charges additional reads?Firebase 查询会收取额外的读取费用吗?
【发布时间】:2021-01-31 14:57:00
【问题描述】:
firebase 查询是如何工作的?
例如,如果我写这个查询,
var collectionReference = FirebaseFirestore.instance
.collection('collection')
.where(cond)
.where(cond2)
.where(cond3);
所以这只会返回符合条件的文件吗?
而且我只会为这些文档阅读付费?
【问题讨论】:
标签:
firebase
flutter
dart
google-cloud-firestore
google-cloud-functions
【解决方案1】:
来自docs TL:DR
阅读费用有一些细微差别,您应该牢记。以下部分详细解释了这些细微差别。
监听查询结果
Cloud Firestore 允许您收听查询结果并在查询结果更改时获取实时更新。
当您收听查询结果时,每次添加或更新结果集中的文档时,您都需要支付一次读取费用。当由于文档已更改而从结果集中删除文档时,您还需要支付读取费用。 (相比之下,删除文档后,您无需为阅读付费。)
此外,如果侦听器断开连接的时间超过 30 分钟(例如,如果用户离线),您将被收取读取费用,就像您发出了全新的查询一样。
管理大型结果集
Cloud Firestore 具有多项功能,可帮助您管理返回大量结果的查询:
游标,允许您恢复长时间运行的查询。
页面标记,可帮助您对查询结果进行分页。
限制,指定要检索多少个结果
偏移量,允许您跳过固定数量的文档。
使用游标、页面标记和限制不会产生额外费用。事实上,这些功能可以通过只阅读您真正需要的文档来帮助您节省资金。
但是,当您发送包含偏移量的查询时,您需要为每个跳过的文档支付一次阅读费用。例如,如果您的查询使用 10 的偏移量,并且查询返回 1 个文档,则您需要为 11 次读取付费。由于这个额外的成本,您应该尽可能使用游标而不是偏移量。
文档读取以外的查询
对于文档读取以外的查询,例如对集合 ID 列表的请求,您需要为一个文档读取付费。如果获取完整的结果集需要多个请求(例如,如果您使用分页),则每个请求都会向您收费。
查询的最低费用
对于您执行的每个查询,即使查询没有返回任何结果,也需要读取一个文档的最低费用。