Wie verwalten Sie die bidirektionale Synchronisation zwischen einem 'Haupt'-Datenbankserver und vielen' Sekundär'-Servern, insbesondere die Konfliktlösung, vorausgesetzt, eine Verbindung ist nicht immer verfügbar?
Zum Beispiel habe ich eine mobile App, die CoreData als "Datenbank" unter iOS verwendet, und ich möchte Benutzern erlauben, die Inhalte ohne Internetverbindung zu bearbeiten. Gleichzeitig sind diese Informationen auf einer Website verfügbar, mit der die Geräte eine Verbindung herstellen. Was mache ich, wenn die Daten auf den beiden DB-Servern in Konflikt stehen?
(Ich bezeichne CoreData als DB-Server, obwohl mir bewusst ist, dass es etwas anderes ist.)
Gibt es allgemeine Strategien für den Umgang mit solchen Problemen? Dies sind die Optionen , die ich denken kann:
1. Immer die clientseitige Daten mit höherer Priorität verwendet
2. Das gleiche gilt für die serverseitige
3.e Versuchen zur Lösung von Konflikten durch jedes Feld bearbeiten Zeitstempel markiert und unter der neuesten bearbeiten
Obwohl ich mir sicher bin, dass die dritte Option Raum für verheerende Datenkorruption eröffnet.
Ich bin mir bewusst, dass das GAP-Theorem dies betrifft, aber ich möchte nur eine eventuelle Konsistenz, also schließt es dies nicht vollständig aus, oder?
Verwandte Frage: Best-Practice-Muster für die bidirektionale Datensynchronisation . Die zweite Antwort auf diese Frage besagt, dass dies wahrscheinlich nicht möglich ist.