40 Stimmen

Strategie für Offline/Online-Datensynchronisation

Meine Anforderung ist ich habe Server J2EE Web-Anwendung und Client J2EE Web-Anwendung. Manchmal kann der Client offline gehen. Wenn der Client online ist, sollte er in der Lage sein, Änderungen hin und her zu synchronisieren. Außerdem sollte ich in der Lage sein zu steuern, welche Zeilen/Tabellen auf der Grundlage einiger Filter/Regeln synchronisiert werden müssen. Gibt es irgendwelche Java-Frameworks, die dies ermöglichen? Wenn ich es selbst implementieren muss, welche verschiedenen Strategien können Sie vorschlagen?

Eine Lösung in meinem Kopf ist die Aufrechterhaltung Sql-Protokolle und die Ausführung der gleichen Anweisungen auf der anderen Seite während der Synchronisation. Sehen Sie irgendwelche Probleme mit dieser Strategie?

29voto

Dónal Punkte 180956

Es gibt eine Reihe von Java-Bibliotheken für die Synchronisierung/Replikation von Daten. Zwei, die mir bekannt sind, sind Narzisse y SymmetricDS . In einem früheren Leben habe ich dummerweise (in Java) meinen eigenen Datenreplikationsprozess implementiert. Es scheint eine Sache zu sein, die ziemlich einfach sein sollte, aber wenn die Daten an mehreren Stellen gleichzeitig aktualisiert werden können, ist es höllisch kompliziert. Ich empfehle Ihnen dringend, eines der oben genannten Projekte zu verwenden, um zu versuchen, diese Komplexität selbst zu umgehen.

17voto

Kieveli Punkte 10750

Das größte Problem bei der Synchronisierung ist, wenn der Benutzer etwas offline bearbeitet und es gleichzeitig online bearbeitet wird. Sie müssen die beiden geänderten Daten zusammenführen oder die Benutzeroberfläche so gestalten, dass der Benutzer sagen kann, welche Version die richtige ist. Wenn Sie die Möglichkeit ausschließen, dass beide Daten gleichzeitig bearbeitet werden, müssen Sie dieses hartnäckige Problem nicht lösen.

Die Methode besteht in der Regel darin, ein Feld "Modified" zu allen Tabellen hinzuzufügen und das Modified-Feld des Clients für einen bestimmten Datensatz in einer bestimmten Zeile mit dem Modified-Datum des Servers zu vergleichen. Wenn sie nicht übereinstimmen, ersetzen Sie die Daten des Servers.

Seien Sie vorsichtig mit automatisch generierten Schlüsseln - Sie müssen sicherstellen, dass die Datenintegrität beim Kopieren vom Client zum Server erhalten bleibt. Wenn Sie die SQL-Anweisungen auf dem Server erneut ausführen, könnte es passieren, dass sich der automatisch generierte Schlüssel geändert hat und Ihre Fremdschlüssel plötzlich auf andere Datensätze verweisen, als Sie beabsichtigt hatten.

Wenn Sie Daten aus einer anderen Quelle importieren, behalten Sie häufig sowohl den Primärschlüssel der Fremdquelle als auch Ihren eigenen Primärschlüssel im Auge. Dies erleichtert die Bestimmung der Änderungen und Unterschiede zwischen den Datensätzen in schwierigen Synchronisierungssituationen.

3 Stimmen

Ich habe dies abgelehnt (sorry), weil ich denke, dass es die damit verbundenen Probleme stark vereinfacht. Es geht überhaupt nicht um Sicherheit oder selektive Synchronisation. Die These von Stettler ist eine gute Einführung in die Thematik ( ifi.uzh.ch/archiv/masterthesen/DA_Arbeiten_2003/ )

0 Stimmen

Vielen Dank für die Informationen. Ich denke, der Link von Hamlet ist eine gute Referenz. Die von Kieveli beantworteten Kernpunkte sind gut genug für eine Fibel, die man in 30 Sekunden lesen kann.

5voto

Norman Ramsey Punkte 193087

Ihr Synchronisierer muss erkennen, wann Daten einfach aktualisiert werden können und wann ein Mensch einen potenziellen Konflikt schlichten muss. Ich habe ein Papier, in dem erklärt wird, wie man dies mit Hilfe von Protokollierung und algebraischen Gesetzen erreichen kann .

2 Stimmen

Es gibt auch eine Masterarbeit von Christian Stettler zu diesem Thema: ifi.uzh.ch/archiv/masterthesen/DA_Arbeiten_2003/ Es gibt große Sicherheitsprobleme, die angegangen werden müssen, und dieses Papier deckt sie sehr gut ab.

3 Stimmen

@Jen S. der Link ist nicht mehr erreichbar

2 Stimmen

0voto

CruiZen Punkte 172

Was eignet sich am besten als clientseitiger Datenspeicher in Ihrer Anwendung? Sie können zwischen einer eingebetteten Datenbank wie SQLite, einer Nachrichtenwarteschlange oder einem Objektspeicher wählen oder (falls keine dieser Möglichkeiten besteht, da es sich um eine Webanwendung handelt) Dateien/Dokumente, die auf dem Client mit Web DB oder IndexedDB durch die HTML 5-Funktion LocalStorage API.

Prüfen Sie das Papier Goldrausch: Mobile Transaktions-Middleware mit Java-Objekt-Replikation . In der Dokumentation von Microsoft über gelegentlich verbundene Systeme werden zwei Ansätze beschrieben: dienst- oder nachrichtenorientiert und datenorientiert. Gold Rush verfolgt den ersten Ansatz. Der letztere Ansatz verwendet die Datenbank-Merge-Replikation.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X