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 i dispositivi si connetteranno. Cosa devo fare se / quando i dati sui due server DB sono in conflitto?
(Mi riferisco a CoreData come server DB, anche se sono consapevole che si tratta di qualcosa di leggermente diverso.)
Esistono strategie generali per affrontare questo tipo di problema?
Queste sono le opzioni a cui posso pensare:
1. Usa sempre i dati sul lato client come priorità più elevata
2. Lo stesso per il lato server
3. Prova a risolvere i conflitti contrassegnando la data / ora di modifica di ogni campo e prendendo la modifica più recente
Anche se sono certo che la terza opzione aprirà margini di corruzione dei dati devastanti.
Sono consapevole del fatto che il teorema della PAC lo riguarda, ma voglio solo una coerenza finale, quindi non lo esclude completamente, giusto?
Domanda correlata: Modelli di best practice per dati bidirezionali sincronizzazione . La seconda risposta a questa domanda dice che probabilmente non si può fare.