Best Practice / Patterns für die bidirektionale Datensynchronisation

52

Sehr oft taucht in meiner Arbeit die Idee der bidirektionalen Datensynchronisation zwischen Datenbanksystemen auf. Das klassische Beispiel sind zwei leicht unterschiedliche CRM-Systeme (z. B. Raiser's Edge und Salesforce), zwischen denen eine bidirektionale Synchronisierung der Kontaktdaten erforderlich ist.

Abgesehen von API-Überlegungen ist dies eine Aufgabe, die von Nicht-Technikern oft unterschätzt wird, vorausgesetzt, Sie haben einen gemeinsamen Schlüssel für die Synchronisierung und denken nur an den zu verwendenden Algorithmus / das zu verwendende Muster.

Zum Beispiel müssen Sie auf Folgendes achten:

  • Können Sie leicht erkennen, welche Datensätze sich in beiden Systemen geändert haben (oder müssen Sie alle Datensätze zwischen den Systemen vergleichen, um Änderungen zu erkennen)?
  • Wenn Sie alle N Stunden eine Synchronisierung durchführen möchten, wie Sie mit Konflikten umgehen, bei denen sich derselbe Datensatz in beiden Systemen mehr oder weniger zur gleichen Zeit ändert
  • Wenn Sie eine Echtzeitsynchronisierung durchführen möchten (dh ein Update auf einem System löst sofort ein Update auf dem anderen System aus), wie Sie mit zeitlichen Abweichungen aufgrund von Fehlern oder Systemabstürzen umgehen können

Persönlich kann ich mir überlegen, wie ich das alles angehen kann, aber ich frage mich, ob es bekannte Muster, Literatur oder Best Practices gibt, auf die ich mich beziehen könnte.

codeulike
quelle
Was Sie beschreiben, klingt ziemlich ähnlich wie das System der zusammengeschlossenen Datenbanken - ist das richtig?
gnat
@gnat: Vielen Dank für den Link, einige der Bedenken sind ähnlich (z. B. der Umgang mit Heterogenität), aber ich spreche von der Synchronisierung einer Teilmenge von Daten aus zwei autonomen Datenbanken, wobei es anscheinend mehr darum geht, eine vollständig integrierte Ansicht von allem zu erstellen über mehrere DBS.
Codeulike
1
7 Jahre später 50 positive Bewertungen, aber nur 1 anständige Antwort. Es muss Synchronisationsmuster oder Best Practices geben?
Codeulike

Antworten:

8

Ja, ein hartes Problem, leicht unterschätzt. Und könnte eine Menge Arbeit sein. Wenn Sie mit Microsoft-Technologien arbeiten, sollten Sie sich hier und hier das Microsoft Sync Framework ansehen .

Codierungslautstärke
quelle
1
Danke, das ist interessant. Ich hatte von Ms Sync Framework gehört, aber nicht bemerkt, dass es so verallgemeinert war. Grundsätzlich ist dies ein Muster für die Behandlung von Synchronisierungsproblemen im Allgemeinen.
Codeulike
2
Microsoft Sync Framework wurde durch Microsoft Sync Framework Toolkit ersetzt.
Tomas Kubes
Ich bin frustriert über die Dokumente, die nicht so eindeutig sind, insbesondere für ADO.NET-Datenanbieter mit Nicht-SQL-Server, was mein Fall ist. Außerdem sucht mein Arbeitsplatz nach etwas, das nicht das Hinzufügen von Infrastrukturtabellen oder das Vornehmen von Änderungen in der Produktionsumgebung erfordert. Also werde ich diesen wegwerfen.
Veverke
0

Es gibt viele Theorien zur DB-Synchronisation an entfernten Standorten. Beginnen Sie zuerst mit INSERT. Die Handhabung ist einfach, da Sie für jede Site eine eindeutige ID erstellen können (z. B. eine Initiale aus Site-Name + ID (Nummer): site_a_177 vs. site_b_53).

Einfügen sollte also keine Konflikte verursachen. das problem ist das update. Ich glaube nicht, dass es eine 100% ausfallsichere Methode gibt, aber Sie können ein Update starten, indem Sie den Datensatz in der Remote-Datenbank "sperren" und erst, wenn Sie das Handle haben, mit dem Update fortfahren und das Update synchronisieren und erst dann die sperre aufheben.

alfasin
quelle
1
Vielen Dank, ich denke, Sie sprechen über verteilte Datenbanken mit demselben Schema und verteilte Transaktionen. Ich denke eher an Szenarien, in denen die beiden DBs völlig autonom sind (z. B. sie weisen eindeutige IDs auf völlig unterschiedliche Weise zu und die Schemata unterscheiden sich), aber Sie möchten eine Teilmenge der darin enthaltenen Daten synchronisieren.
Codeulike
Es hört sich so an, als sollte es keine Konflikte geben. In diesem Fall sollte es sehr einfach sein - speichern Sie einfach die "letzte Datensatz-ID", die für jede Tabelle synchronisiert wurde, und fahren Sie von dort fort.
Alfasin