Nous développons deux systèmes liés. L'un d'eux (A) sera installé sur les machines de nos clients. Le reste (B) sera utilisé par mon organisation.
Chaque système possède sa propre base de données (relationnelle) et leurs schémas diffèrent. Cependant, les deux systèmes doivent être synchronisés. De plus, certaines modifications de B doivent être exportées vers tous les systèmes de classe A et d'autres uniquement vers un système spécifique.
Certains clients n'ayant pas de connexion Internet, la synchronisation, dans certains cas, doit être effectuée via l'échange de fichiers.
Nous prévoyons donc de résoudre ce problème comme suit:
- Chaque système tient un journal des modifications de sa base de données. Nous prévoyons de l'implémenter avec MongoDB.
- Lorsqu'un système initialise un processus de synchronisation, il récupère toutes les modifications apportées à partir d'un journal. Si le système est B, les modifications récupérées dépendent de la destination. Ensuite, le système les sérialise au format XML et, enfin, les envoie (via un fichier ou un réseau).
- Lorsque l'autre noeud final reçoit l'ensemble de modifications, il les désérialise. Ensuite, le système effectue des transformations sur les données, ce qui peut être nécessaire, et enfin, enregistre les modifications. Dans cette étape, si cela est nécessaire, le système doit résoudre les conflits qui pourraient exister.
- Enfin, le système récepteur envoie ses modifications (et d'autres produits de résolution de conflits).
Cette approche est-elle faisable, évolutive et élégante? Quels changements ou ajouts apporteriez-vous?