You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore服务端悲观锁事务下客户端普通写入的冲突处理问询

Firestore事务与非事务普通写入的冲突处理

首先明确:Firestore的事务基于乐观并发控制,而非传统悲观锁机制,但会对目标文档的更新冲突进行严格检测。

针对你描述的场景:当事务正在执行(已读取user/talkuser文档并准备更新),此时若有非事务的普通写入操作修改同一文档,结果如下:

  • 非事务写入会直接成功执行;
  • 事务在提交阶段会检测到目标文档的版本已被修改(事务读取时的快照版本已过期),从而执行失败(SDK通常会自动重试指定次数,超出次数后才抛出错误)。

原因在于Firestore事务的核心逻辑:事务读取文档时会记录当前的快照版本,提交更新时会校验文档是否仍处于该版本。只要有其他操作(无论是否是事务)修改了文档,事务就会判定为冲突,终止执行。

对应你提供的代码示例:
事务先通过transaction.get()获取talkuser文档快照并记录版本,若提交前有非事务写入修改了该文档,transaction.update()提交时会触发版本校验失败,导致事务失败。

内容的提问来源于stack exchange,提问作者mozuku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:19:54