Estamos desarrollando dos sistemas relacionados. Uno de ellos (A) se instalará en las máquinas de nuestros clientes. El resto (B) será utilizado por mi organización.
Cada sistema tiene su propia base de datos (relacional) y sus esquemas difieren. Sin embargo, ambos sistemas tienen que estar sincronizados. Además, algunos cambios en B deben exportarse a todos los sistemas de clase A y otros solo a uno específico.
Algunos clientes no tienen conexión a Internet, por lo que la sincronización, en algunos casos, debe realizarse mediante el intercambio de archivos.
Entonces, estamos planeando resolver este problema de la siguiente manera:
- Cada sistema mantiene un registro de cambios de su base de datos. Estamos planeando implementarlo con MongoDB.
- Cuando un sistema inicializa un proceso de sincronización, recupera todos los cambios realizados desde un registro. Si el sistema es B, los cambios recuperados dependen del destino. Luego, el sistema los serializa en formato XML y, finalmente, los envía (a través de un archivo o una red).
- Cuando el otro punto final recibe el conjunto de cambios, los deserializa. Luego, el sistema realiza algunas transformaciones sobre los datos, que pueden ser necesarias, y finalmente, registra los cambios. En este paso, si es necesario, el sistema tiene que resolver los conflictos que puedan existir.
- Por último, el sistema receptor envía sus cambios (y otros productos de resolución de conflictos).
¿Es este enfoque factible, escalable y elegante? ¿Qué cambios o adiciones harías?