Come gestite la sincronizzazione bidirezionale tra un server di database "principale" e molti server "secondari", in particolare la risoluzione dei conflitti, supponendo che una connessione non sia sempre disponibile?
Ad esempio, ho un'app mobile che utilizza CoreData come "database" su iOS e vorrei consentire agli utenti di modificare i contenuti senza connessione a Internet. Allo stesso tempo, queste informazioni sono disponibili su un sito Web a cui si collegheranno i dispositivi. Cosa devo fare se / quando i dati sui due server DB sono in conflitto?
(Mi riferisco a CoreData come un server DB, anche se sono consapevole che è qualcosa di leggermente diverso.)
Esistono strategie generali per affrontare questo tipo di problema? Queste sono le opzioni che mi vengono in mente:
1. Usa sempre i dati sul lato client come priorità più alta
2. Lo stesso per il lato server
3. Prova a risolvere i conflitti contrassegnando il timestamp di modifica di ciascun campo e prendendo l'ultima modifica
Anche se sono sicuro che la terza opzione aprirà spazio per un danneggiamento devastante dei dati.
Sono consapevole che il teorema della PAC riguarda questo, ma voglio solo un'eventuale coerenza, quindi non lo esclude completamente, giusto?
Domanda correlata: modelli di best practice per la sincronizzazione dei dati bidirezionale . La seconda risposta a questa domanda dice che probabilmente non può essere fatto.