Wir entwickeln zwei verwandte Systeme. Eine davon (A) wird auf den Maschinen unserer Kunden installiert. Der Rest (B) wird von meiner Organisation verwendet.
Jedes System hat eine eigene Datenbank (relational) und ihre Schemata unterscheiden sich. Beide Systeme müssen jedoch synchronisiert werden. Außerdem müssen einige Änderungen in B in alle Systeme der Klasse A und andere nur in ein bestimmtes exportiert werden.
Einige Kunden haben keine Internetverbindung, daher muss die Synchronisierung in einigen Fällen über den Austausch von Dateien erfolgen.
Daher planen wir, dieses Problem wie folgt zu lösen:
- Jedes System führt ein Änderungsprotokoll seiner Datenbank. Wir planen, es mit MongoDB zu implementieren.
- Wenn ein System einen Synchronisierungsprozess initialisiert, ruft es alle vorgenommenen Änderungen aus einem Protokoll ab. Wenn das System B ist, hängen die abgerufenen Änderungen vom Ziel ab. Anschließend serialisiert das System sie im XML-Format und sendet sie schließlich (über eine Datei oder ein Netzwerk).
- Wenn der andere Endpunkt den Änderungssatz empfängt, werden er unserialisiert. Anschließend führt das System einige Transformationen über die Daten durch, die erforderlich sein können, und zeichnet schließlich die Änderungen auf. In diesem Schritt muss das System bei Bedarf die möglicherweise vorhandenen Konflikte lösen.
- Zuletzt sendet das Empfängersystem seine Änderungen (und andere Produkte der Konfliktlösung).
Ist dieser Ansatz machbar, skalierbar und elegant? Welche Änderungen oder Ergänzungen würden Sie vornehmen?