解决冲突?

joh*_*nyl 9 offline conflict firebase

如果2个或更多用户都处于脱机状态并且他们正在编辑相同的数据,那么谁赢了?或者,更好的是,是否存在冲突/合并解决方案?

Mic*_*uer 14

答案取决于他们如何修改数据.

  • set()(以及remove,push,setWithPriority等)是last-write-wins.因此,如果客户端A和客户端B都"离线",然后再连接到Firebase,如果客户端A首先成功连接到Firebase,他的set()将被写入Firebase,但是当客户端B最终连接时,他的集合将覆盖客户A的集合,因此客户B最终将获胜.
  • transaction()具有内置的冲突解决方案.因此,如果客户端A首先连接到Firebase,他的交易将在第一次尝试时成功(因为没有冲突).然后,当客户端B连接时,他的事务将在第一次尝试时失败,因此他的事务更新功能将自动运行第二次(现在在客户端A先前写入的新数据上),并且此新数据将写入Firebase (假设没有进一步的冲突).

所以,如果你不关心谁赢,请使用set().如果需要通过冲突/合并解决方案确保某种一致性,请使用transaction().