Opracowujemy dwa powiązane systemy. Jeden z nich (A) zostanie zainstalowany na maszynach naszych klientów. Pozostałe (B) zostaną wykorzystane przez moją organizację.
Każdy system ma własną bazę danych (relacyjną), a ich schematy są różne. Jednak oba systemy muszą być zsynchronizowane. Ponadto niektóre zmiany B należy wyeksportować do wszystkich systemów klasy A, a inne tylko do określonego.
Niektórzy klienci nie mają połączenia z Internetem, dlatego w niektórych przypadkach synchronizacja musi odbywać się poprzez wymianę plików.
Planujemy więc rozwiązać ten problem w następujący sposób:
- Każdy system utrzymuje dziennik zmian swojej bazy danych. Planujemy wdrożyć go w MongoDB.
- Gdy system inicjuje proces synchronizacji, pobiera wszystkie wprowadzone zmiany z dziennika. Jeśli system to B, odzyskane zmiany zależą od miejsca docelowego. Następnie system serializuje je w formacie XML i na koniec wysyła je (za pomocą pliku lub sieci).
- Gdy drugi punkt końcowy otrzymuje zestaw zmian, odserializuje je. Następnie system dokonuje pewnych przekształceń danych, które mogą być konieczne, i na koniec rejestruje zmiany. Na tym etapie, jeśli jest to konieczne, system musi rozwiązać konflikty, które mogą istnieć.
- Na koniec system odbiorczy wysyła swoje zmiany (i inne produkty rozwiązywania konfliktów).
Czy to podejście jest wykonalne, skalowalne i eleganckie? Jakie zmiany lub uzupełnienia byś wprowadził?