Also ich denke, zusammenfassend beziehen sich Ihre Fragen auf getrennte Synchronisierung.
Also hier ist, was ich denke passieren sollte:
Initial Sync Sie rufen die Daten und alle Informationen mit ihm verbunden (Zeilenversionen, Datei Prüfsummen usw.). Es ist wichtig, dass Sie diese Informationen speichern und sie bis zur nächsten erfolgreichen Synchronisierung unverändert lassen. Änderungen sollten bei einer Kopie dieser Daten vorgenommen werden.
Verfolgen von Änderungen Wenn Sie mit Datenbankzeilen arbeiten, ist die Idee, dass Sie Vorgänge einfügen, aktualisieren und löschen müssen. Wenn Sie mit Textdateien wie xml arbeiten, dann ist es etwas komplizierter. Wenn es wahrscheinlich ist, dass mehrere Benutzer diese Datei gleichzeitig bearbeiten, müssten Sie ein Diff-Tool haben, damit Konflikte auf einer detaillierteren Ebene (statt der gesamten Datei) erkannt werden können.
Auf Konflikte prüfen Wenn Sie nur mit Datenbankzeilen arbeiten, sind Konflikte leicht zu erkennen. Sie können eine andere Spalte haben, die erhöht wird, wenn die Zeile aktualisiert wird (ich denke, Mssql hat diese eingebaute nicht sicher über MySQL). Wenn also die Kopie eine andere Nummer hat als die auf dem Server, dann liegt ein Konflikt vor. Für Dateien oder Zeichenfolgen wird eine Prüfsumme benötigt. Ich nehme an, Sie könnten das modifizierte Datum auch verwenden, aber stellen Sie sicher, dass Sie eine sehr genaue und genaue Messung haben, um Fehler zu vermeiden.Zum Beispiel: Sagen wir, ich bekomme eine Datei und Sie speichern sie, sobald ich sie abgerufen habe. Nehmen wir an, der Zeitunterschied ist eine 1 Millisekunde. Ich mache dann Änderungen an der Datei, dann versuche ich es zu speichern. Wenn die aufgezeichnete Zeit für die letzte Änderung nur auf 10 Millisekunden genau ist, besteht eine gute Chance, dass die von mir abgerufene Datei das gleiche Datum hat wie das gespeicherte, sodass das Programm keinen Konflikt erkennt und Ihre Änderungen überschreibt. Daher verwende ich diese Methode im Allgemeinen nicht, um auf der sicheren Seite zu sein. Auf der anderen Seite ist die Wahrscheinlichkeit einer Prüfsummen-/Hash-Kollision nach einer geringfügigen Modifikation nahezu gleich Null.
Auflösen von Konflikten Dies ist nun der schwierige Teil. Wenn dies ein automatisierter Prozess ist, müssen Sie die Situation beurteilen und entscheiden, ob Sie die Änderungen überschreiben, Ihre Änderungen verlieren oder die Daten erneut vom Server abrufen und versuchen möchten, die Änderungen zu wiederholen. Zum Glück für Sie scheint es, dass es menschliche Interaktion geben wird. Aber es ist immer noch eine Menge Schmerzen zu programmieren. Wenn Sie mit Datenbankzeilen arbeiten, können Sie jede einzelne Spalte überprüfen und sie mit den Daten auf dem Server vergleichen und sie dem Benutzer präsentieren. Die Idee besteht darin, Konflikte dem Benutzer sehr detailliert zu präsentieren, um sie nicht zu überwältigen. Die meisten Konflikte haben sehr kleine Unterschiede an vielen verschiedenen Stellen, so dass es für den Benutzer einen kleinen Unterschied auf einmal darstellt. Also für Textdateien ist es fast gleich, aber hundertmal komplizierter. Also im Grunde müssten Sie ein Diff-Tool erstellen oder verwenden (Textvergleich ist ein ganz anderes Thema und ist zu weit gefasst, um es hier zu erwähnen), das Sie über die kleinen Änderungen in der Datei informiert und in ähnlicher Weise wie in a Datenbank: Hier wurde Text eingefügt, gelöscht oder bearbeitet. Dann präsentieren Sie das dem Benutzer auf die gleiche Weise. Im Grunde müsste der Benutzer also für jeden kleinen Konflikt entscheiden, ob er seine Änderungen verwerfen, Änderungen auf dem Server überschreiben oder eine manuelle Bearbeitung durchführen möchte, bevor er an den Server gesendet wird.
Also, wenn Sie die Dinge richtig gemacht haben, sollte der Benutzer eine Liste von Konflikten gegeben werden, wenn es welche gibt. Diese Konflikte sollten granular genug sein, damit der Benutzer schnell entscheiden kann. Zum Beispiel ist der Konflikt eine Rechtschreibänderung von, es wäre einfacher für den Benutzer, aus Wortschreibweisen zu wählen, im Gegensatz dazu, dem Benutzer den ganzen Absatz zu geben und ihm zu sagen, dass es eine Änderung gab und dass sie entscheiden müssen, was zu tun ist Der Benutzer müsste dann nach diesem kleinen Rechtschreibfehler suchen.
Andere Überlegungen: Datenvalidierung - Denken Sie daran, dass Sie nach der Konfliktlösung eine Validierung durchführen müssen, da sich die Daten möglicherweise geändert haben. Textvergleich - wie ich schon sagte, ist dies ein großes Thema. also google es! Getrennte Synchronisation - Ich denke, es gibt ein paar Artikel da draußen.
Quelle: https://softwareengineering.stackexchange.com/questions/94634/synchronization-web-service-methodologies-or-papers
Vielen Dank für Ihr Feedback. Ich denke, das Problem, das Sie bezüglich der Zeitverschiebung angesprochen haben, ist wichtig. Meine erste Hoffnung ist, dass zwischen NTP auf dem Server und den eigenen Zeitsynchronisierungsdiensten des iPhone/Touch mit den Carrier/Computer - Zeitverschiebungsproblemen gemildert werden. Ist diese Annahme zu gefährlich? – hyuan
Es ist in vielerlei Hinsicht zerbrechlich - zum Beispiel kann eine Uhr, die rückwärts zurückgesetzt wird, auch verpasste Aktualisierungen verursachen, und verpasste Aktualisierungen können zu unerkannten Bearbeitungskonflikten führen. Die Multi-Master-Replikation ist eine nicht-triviale Aufgabe. –
Vielen Dank für die freundliche Beratung. Hoffentlich können Sie in ein paar Wochen die Früchte Ihrer Weisheit sehen. Die fragliche Seite ist bereits verfügbar (www.ayenotes.com), aber die iPhone App ist es nicht. – hyuan