Méthode recommandée / Modèles pour la synchronisation bidirectionnelle des données

52

Bien souvent, dans mon travail, l'idée de la synchronisation bidirectionnelle des données entre systèmes de bases de données est apparue. L'exemple classique est celui de deux systèmes CRM légèrement différents (Raiser's Edge et Salesforce, par exemple) et de la nécessité de synchroniser les données de contact dans les deux sens.

Outre les considérations relatives aux API, en supposant que vous disposiez d'une clé partagée sur laquelle vous souhaitez vous synchroniser et en pensant uniquement à l'algorithme / modèle à utiliser, cette tâche est souvent sous-estimée par les non-techniciens.

Par exemple, vous devez faire attention à:

  • Pouvez-vous facilement détecter quels enregistrements ont changé dans les deux systèmes (ou devrez-vous comparer tous les enregistrements entre les systèmes pour détecter les modifications)?
  • Si vous optez pour une synchronisation une fois toutes les N heures, comment gérer les conflits où le même enregistrement est modifié à peu près au même moment dans les deux systèmes
  • Si vous optez pour une synchronisation en temps réel (c.-à-d. Une mise à jour dans un système déclenche immédiatement une mise à jour vers l'autre système), comment gérer les divergences dans le temps dues à des bugs ou à des pannes du système

Personnellement, je peux penser à des solutions à ce problème, mais je me demande s’il existe des modèles, de la littérature ou des pratiques exemplaires bien connus auxquels je pourrais me référer.

codeulike
la source
ce que vous décrivez semble assez proche du système de base de données Federated - est-ce exact?
moucher
@gnat: Merci pour le lien, certaines des préoccupations sont similaires (par exemple, traiter avec l'hétérogénéité), mais je parle de la synchronisation d'un sous-ensemble de données à partir de deux bases de données autonomes, alors que cela semble être plus de créer une vue totalement intégrée de tout sur plusieurs dbs.
codeulike
1
7 ans plus tard, 50 votes positifs mais une seule réponse décente. Il doit y avoir des schémas de synchronisation ou des meilleures pratiques?
codeulike

Réponses:

8

Oui, un problème difficile, facilement sous-estimé. Et pourrait être beaucoup de travail. Si vous utilisez les technologies Microsoft, vous pouvez consulter Microsoft Sync Framework ici et ici .

codageoutloud
la source
1
Merci, c'est intéressant. J'avais entendu parler de Ms Sync Framework mais je n'avais pas réalisé qu'il était si généralisé. C'est en gros un modèle de traitement des problèmes de synchronisation en général.
codeulike
2
Microsoft Sync Framework a été remplacé par Microsoft Sync Framework Toolkit.
Tomas Kubes
Je suis frustré par la documentation, qui n'est pas très claire, spécialement pour les fournisseurs de données ADO.NET non-SQL Server, ce qui est mon cas. De plus, mon lieu de travail recherche quelque chose qui n'exige pas l'ajout de tables d'infrastructure / la modification de l'environnement de production. Je suis donc sur le point de jeter celui-ci.
Veverke
0

Il existe de nombreuses théories sur la synchronisation de bases de données sur sites distants. Commencez par INSERT. La manipulation de celui-ci est simple - vous pouvez créer un identifiant unique pour chaque site (par exemple, une initiale du nom du site + identifiant (numéro): site_a_177 vs site_b_53)

Donc, insérer ne devrait pas créer de conflits. le problème est la mise à jour. Je ne crois pas qu'il existe une méthode de preuve d'échec à 100%, mais vous pouvez démarrer une mise à jour en "verrouillant" l'enregistrement dans la base de données distante, et uniquement après avoir obtenu le descriptif - poursuivez la mise à jour et terminez en synchronisant la mise à jour. et seulement alors relâchez le verrou.

Alfasin
la source
1
Merci, je pense que vous parlez de fichiers distribués avec le même schéma et de traiter des transactions distribuées. Je pense plus aux scénarios dans lesquels les deux bases de données sont complètement autonomes (par exemple, ils attribuent des identifiants uniques de manières complètement différentes et les schémas diffèrent), mais vous souhaitez synchroniser un sous-ensemble des données qu'ils contiennent.
codeulike
Il semble qu'il ne devrait y avoir aucun conflit. Dans ce cas, cela devrait être très simple: il suffit de sauvegarder le "dernier ID d'enregistrement" synchronisé pour chaque table et de continuer à partir de là.
Alfasin