Firebase中whereField查询的snapshot监听读取如何计费
Firestore条件查询快照监听器计费说明
你提到的官方示例代码如下:
// 指向cities集合的引用 let citiesRef = db.collection("cities") // 基于集合创建条件查询 let query = citiesRef.whereField("state", isEqualTo: "CA")
针对你的疑问,直接给出明确结论:
- 给上述查询挂载快照监听器时,读取计费只统计
state字段等于"CA"的匹配文档,绝对不会按照cities集合下的全部城市文档计算费用。 - 你觉得这个查询需要遍历集合内所有文档,是对Firestore执行逻辑的误解:Firestore默认会给所有单字段查询生成内置索引,这类单字段等值查询直接走索引拉取匹配结果,根本不会做全集合扫描。就算退一步讲,服务端底层实现里的检索遍历属于平台自身的运维逻辑,这部分开销从来不会算到用户的读取配额里,完全不需要担心这部分产生费用。
实际计费的明确边界如下:
- 首次绑定快照监听器时,会拉取当下所有满足查询条件的文档,每返回1条匹配文档计1次读取
- 监听器正常运行期间,只有符合查询条件的文档发生新增、修改、删除变动时,才会产生新的读取计费,之前已经同步到客户端、没有变动的文档不会重复计费
- 如果监听器断线重连时,本地缓存里的文档版本和服务端一致,这部分缓存命中的内容也不会额外收取读取费用
内容的提问来源于stack exchange,提问作者aa._.ron
相关产品推荐
相关产品推荐

