Konfliktlösung?

8

Wenn zwei oder mehr Benutzer offline sind und dieselben Daten bearbeiten, wer gewinnt? Oder, noch besser, gibt es eine Konflikt / Merge-Auflösung?

    
johnnyl 04.02.2013, 23:18
quelle

1 Antwort

12

Die Antwort hängt davon ab, wie sie Daten ändern.

  • set () (und remove, push, setWithPriority usw.) sind last-write-wins. Wenn also ein Client A und ein Client B beide "offline" sind und später eine Verbindung zu Firebase herstellen, wird Client (A) zuerst erfolgreich mit Firebase verbunden, dann wird set () in Firebase geschrieben, aber wenn Client B schließlich verbunden wird, wird sein Set gesetzt überschreibt die Menge von Client A, so dass Client B letztendlich gewinnt.
  • Die Transaktion () hat eine integrierte Konfliktlösung. Wenn also Client A zuerst mit Firebase verbunden wird, wird seine Transaktion beim ersten Versuch erfolgreich sein (da es keinen Konflikt gibt). Wenn dann Client B eine Verbindung herstellt, wird seine Transaktion beim ersten Versuch fehlschlagen, und daher wird seine Transaktionsaktualisierungsfunktion automatisch ein zweites Mal ausgeführt (jetzt auf den neuen Daten, die Client A zuvor geschrieben hat), und diese neuen Daten werden an Firebase geschrieben (keine weiteren Konflikte vorausgesetzt).

Wenn Sie also nicht interessiert, wer gewinnt, verwenden Sie set (). Wenn Sie eine Konsistenz durch Konflikte / Zusammenführungsauflösung sicherstellen möchten, verwenden Sie transaction ().

    
Michael Lehenbauer 04.02.2013 23:48
quelle

Tags und Links