web-dev-qa-db-fra.com

Meilleures pratiques / modèles pour la synchronisation des données bidirectionnelle

Assez souvent dans mon travail l'idée de synchronisation des données bidirectionnelle entre les systèmes de base de données surgit. L'exemple classique est deux systèmes CRM légèrement différents (disons, Raiser's Edge et Salesforce) et la nécessité d'avoir une synchronisation bidirectionnelle des données de contact entre eux.

Outre les considérations relatives aux API, en supposant que vous ayez une clé partagée pour la synchronisation et en pensant uniquement à l'algorithme/au 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 les enregistrements qui ont changé dans les deux systèmes (ou devrez-vous comparer tous les enregistrements entre les systèmes pour détecter les changements)
  • Si vous optez pour une synchronisation toutes les N heures, comment gérer les conflits où le même enregistrement change plus ou moins en même temps dans les deux systèmes
  • Si vous optez pour une synchronisation en temps réel (c'est-à-dire qu'une mise à jour dans un système déclenche immédiatement une mise à jour vers l'autre système) comment gérer la divergence dans le temps en raison de bogues ou de plantages du système

Personnellement, je peux penser à des moyens de résoudre tout cela, mais je me demande s'il y a des modèles, de la littérature ou des meilleures pratiques bien connus auxquels je pourrais me référer.

53
codeulike

Oui, un problème difficile, facilement sous-estimé. Et cela pourrait demander beaucoup de travail. Si vous utilisez les technologies Microsoft, vous voudrez peut-être jeter un œil à Microsoft Sync Framework ici et ici .

8
codingoutloud

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

L'insertion ne doit donc pas créer de conflits. le problème est la mise à jour. Je ne crois pas qu'il existe une méthode 100% à l'épreuve des pannes, mais vous pouvez démarrer une mise à jour en "verrouillant" l'enregistrement dans la base de données distante, et seulement après avoir obtenu le handle - continuer la mise à jour et terminer en synchronisant la mise à jour puis relâchez le verrou.

0
alfasin