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.
Réponses:
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 .
la source
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.
la source