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

Firestore多事务操作不同文档是否会因竞争被终止?

Firestore事务重试与跨文档竞争的行为疑问

我的集合中有10个文档,10个请求几乎同时进入并执行相同查询。每个请求都会启动独立的transaction,尝试读取1个document并将其删除。根据Firestore文档关于document contention的说明,当同一document上发生多次事务时似乎会引发竞争错误(文档未明确次数)。

Cloud Firestore resolves data contention by delaying or failing one of the operations.

在此场景下,假设其中1个事务提交成功,其余9个操作同一document的事务会因查询的document已变更无法提交而重试,之后这9个事务会尝试操作其他document,直至所有请求完成文档删除且无活跃事务。想咨询:这些不断重试的事务,即使每次操作不同document,是否会因竞争被ABORTED?还是会因每次竞争发生在不同document而持续延迟重试?


回答

  • 当事务重试时操作不同文档的情况下,不会因为跨文档的竞争被直接ABORTED。Firestore的事务竞争限制是针对单个文档的冲突——只有当多个事务同时争抢同一个文档的读写权限时,才会触发延迟或失败机制。
  • 你的场景中,重试的事务每次切换到新文档,相当于每次竞争都发生在不同的文档上,Firestore会针对每个单独的文档冲突进行处理:可能会短暂延迟该事务,直到目标文档可用,而不是直接终止整个事务。
  • 只有当某个事务在重试过程中,反复遭遇同一个文档的竞争(比如多次重试都选中了被其他事务锁定的文档),才有可能达到重试次数上限被ABORTED。但在你的场景里,因为总共有10个文档和10个请求,每个重试的事务最终都会找到未被处理的文档,大概率会完成操作,而不会被ABORTED。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:18:35