Firestore调用onSnapshot实时获取数据的计费规则是什么?
Cloud Firestore onSnapshot() 方法收费说明
直接给结论:使用onSnapshot()做实时监听时,不会在普通文档读取费用之外产生专属的额外收费项,常规场景下的连接维持、数据传输都不会单独计费。
具体计费规则拆解:
- 首次发起监听时,Firestore会拉取所有符合监听条件的存量文档,这部分和你用普通
get()拉数据的计费规则完全一致,按实际读取的文档数量计算读取费用。 - 监听建立后的存续期间,没有数据变更时不会产生任何费用,维持长连接本身不收费。只有当监听范围内的文档发生增/删/改、符合你设置的筛选条件时,才会按推送的变更文档数量计算新的读取次数。
- 常规场景下,实时监听推送数据产生的公网下行流量不单独收费,不需要为数据包传输额外交流量费。
只有两种特殊场景可能产生预期之外的费用,都和onSnapshot()方法本身无关:
- 如果你设置的监听范围过大(比如无过滤条件监听包含数十万文档的全集),首次拉取存量数据、后续高频变更都会产生大量读取计数,这部分属于正常的文档读取计费,不是监听的额外收费,优化监听筛选条件就能控制成本。
- 如果你使用的是多区域部署的Firestore实例,跨GCP大区的公网出口流量达到单月百GB以上量级时,会产生GCP统一的跨区流量费用,这部分费用不管你是用
onSnapshot()实时拉取,还是用get()手动轮询拉取都会产生,和实时监听功能没有绑定关系。
基础单文档监听示例
import { doc, onSnapshot } from "firebase/firestore"; const unsub = onSnapshot(doc(db, "cities", "SF"), (doc) => { console.log("Current data: ", doc.data()); });
以上方代码为例:首次绑定监听时收取1次cities/SF文档的读取费用,后续只有当这个文档内容被修改时,才会产生新的1次读取费用,没有其他附加收费项。如果不需要继续监听,记得调用返回的unsub()方法解绑即可,解绑后不会再产生任何相关费用。
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

