解决冲突?

时间:2013-02-04 23:18:42

标签: conflict offline firebase

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

1 个答案:

答案 0 :(得分: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()。