it-swarm.com.de

Best Practice / Muster für die bidirektionale Datensynchronisation

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) und die Notwendigkeit einer wechselseitigen Synchronisierung der Kontaktdaten zwischen ihnen.

Abgesehen von API-Überlegungen ist dies eine Aufgabe, die von Nicht-Technikern häufig unterschätzt wird, vorausgesetzt, Sie haben einen gemeinsamen Schlüssel zum Synchronisieren 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 eine Synchronisation alle N Stunden durchführen, 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 (dh ein Update in 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.

53
codeulike

Ja, ein schweres Problem, leicht zu unterschätzen. Und könnte viel Arbeit sein. Wenn Sie mit Microsoft-Technologien arbeiten, sollten Sie sich Microsoft Sync Framework hier und hier ansehen.

8
codingoutloud

Es gibt viele Theorien zur Synchronisierung von Remotestandort-DBs. 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 des Site-Namens + 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, nachdem Sie das Handle erhalten haben - fahren Sie mit dem Update fort und beenden Sie die Synchronisierung des Updates und erst dann das Schloss loslassen.

0
alfasin