Firestore中同一文档并发更新是否需通过事务实现?
Firestore并发写入场景下是否需要事务?
场景回顾
- 双人对战应用,单局游戏对应Firestore中的一个文档,存储所有对战轮次数据
- 每轮对战包含
player1Time和player2Time两个字段,玩家完成单轮后触发Cloud Function更新自身对应的时间字段 - 文档内有数值类型的
state字段,每有一名玩家完成轮次就自增1(单轮需完成两次自增) - 存在两名玩家同时完成轮次,并发写入同一文档的情况
核心结论与分析
这种场景下不需要使用事务,具体原因如下:
- 不同字段的并发写入无冲突风险
Firestore的文档更新是字段级别的,当两个请求分别写入player1Time和player2Time这类不同字段时,服务器会自动合并这些更新操作,不会出现字段被覆盖的问题,无需事务干预。 FieldValue.increment是原子操作admin.firestore.FieldValue.increment(1)是Firestore原生提供的原子自增方法,所有并发的自增请求都会被服务器按顺序处理,绝对不会出现计数丢失或重复计算的情况,完全能满足state字段的自增需求。
内容的提问来源于stack exchange,提问作者Clyon97
相关产品推荐
相关产品推荐

