Estamos desenvolvendo dois sistemas relacionados. Um deles (A) será instalado nas máquinas de nossos clientes. O restante (B) será usado pela minha organização.
Cada sistema possui seu próprio banco de dados (relacional) e seus esquemas diferem. No entanto, ambos os sistemas precisam ser sincronizados. Além disso, algumas alterações em B precisam ser exportadas para todos os sistemas de classe A e outras apenas para um sistema específico.
Alguns clientes não têm conexão com a Internet; portanto, a sincronização, em alguns casos, deve ser feita através da troca de arquivos.
Portanto, planejamos resolver esse problema da seguinte maneira:
- Cada sistema mantém um registro de alterações do seu banco de dados. Estamos planejando implementá-lo com o MongoDB.
- Quando um sistema inicializa um processo de sincronização, ele recupera todas as alterações feitas de um log. Se o sistema for B, as alterações recuperadas dependem do destino. Em seguida, o sistema os serializa no formato XML e, finalmente, os envia (via arquivo ou rede).
- Quando o outro ponto de extremidade recebe o conjunto de alterações, ele os desserializa. Em seguida, o sistema faz algumas transformações nos dados, o que pode ser necessário e, finalmente, registra as alterações. Nesta etapa, se necessário, o sistema precisa resolver os conflitos que possam existir.
- Por fim, o sistema receptor envia suas alterações (e outros produtos de resolução de conflitos).
Essa abordagem é viável, escalável e elegante? Que mudanças ou adições você faria?