2013-02-04 24 views
8

Se 2 o più utenti sono entrambi offline e stanno modificando gli stessi dati, chi vince? O, meglio ancora, c'è una risoluzione conflitto/fusione?Risoluzione dei conflitti?

risposta

12

La risposta dipende da come stanno modificando i dati.

  • set() (e rimuovere, premere, setWithPriority, ecc.) Sono le ultime vincite di scrittura. Quindi se un cliente A e un cliente B sono entrambi "offline" e successivamente si collegano a Firebase, se il client A si collega per la prima volta a Firebase, il suo set() verrà scritto su Firebase, ma quando il client B verrà connesso, il suo set sovrascriverà il set del cliente A, quindi il cliente B alla fine vincerà.
  • transaction() ha risoluzione dei conflitti incorporata. Quindi, se il client A viene connesso per la prima volta a Firebase, la sua transazione riuscirà al primo tentativo (poiché non c'è conflitto). Quindi, quando il client B si connette, la sua transazione fallirà al primo tentativo, e quindi la sua funzione di aggiornamento delle transazioni verrà eseguita automaticamente una seconda volta (ora sui nuovi dati che il cliente A ha precedentemente scritto) e questi nuovi dati saranno scritti su Firebase (non assumendo ulteriori conflitti).

Quindi, se non ti interessa chi vince, usa set(). Se è necessario garantire una certa coerenza attraverso la risoluzione conflitto/fusione, utilizzare transaction().

Problemi correlati