2013-02-04 74 views
8

如果2個或更多的用戶都離線,他們正在編輯相同的數據,誰會贏?或者,更好的是,是否存在衝突/合併解決方案?衝突解決?

回答

12

答案取決於他們如何修改數據。

  • 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()。