Firestore中文档创建失败是否会被算作写入操作并产生计费?
失败的Firestore文档创建操作计费规则
仅成功在服务端落地的操作才会触发计费,失败的创建操作不会产生对应费用
具体规则说明:
- 当调用创建接口时,如果目标文档已存在导致写入请求被服务端拒绝,整个过程没有执行实际的文档写入动作,不会被计入创建类的写操作计费项
- 这类失败请求仅会触发基础的请求身份、权限校验,不会产生业务侧的读写类费用
两种实现方案的成本对比
方案1:先查询再分支处理的原流程
对应逻辑:
1. 读取目标文档 2. 若文档不存在则创建 3. 若文档存在则删除
成本构成:
- 固定产生1次文档读操作费用
- 根据文档是否存在,额外产生1次写操作费用(创建/删除)
- 单次运行最低消耗:1次读 + 1次写
方案2:优先尝试创建的优化流程
对应逻辑:
1. 调用带存在性校验的创建接口写入目标文档 2. 若接口返回“文档已存在”的错误,再执行删除操作
成本构成:
- 文档不存在场景:创建操作成功,仅产生1次写操作费用,无额外读消耗
- 文档已存在场景:创建操作因冲突失败不计费,后续删除操作仅产生1次写操作费用,同样无额外读消耗
- 流程中涉及的文档存在性校验是创建请求内置的服务端校验环节,不属于独立的读操作,不会产生额外的读费用
- 单次运行最低消耗:仅1次写操作,相比原方案每次可节省1次读操作的成本
注意:必须使用带冲突校验的专用创建接口,不能使用默认的覆盖式写入接口,否则会出现文档被意外覆盖、达不到预期分支逻辑的问题。
内容的提问来源于stack exchange,提问作者Conchi Bermejo
相关产品推荐
相关产品推荐

