Stiamo sviluppando due sistemi correlati. Uno di questi (A) verrà installato sulle macchine dei nostri clienti. Il restante (B) verrà utilizzato dalla mia organizzazione.
Ogni sistema ha il suo database (relazionale) e i loro schemi differiscono. Tuttavia, entrambi i sistemi devono essere sincronizzati. Inoltre, alcune modifiche in B devono essere esportate in tutti i sistemi di classe A e altre solo in uno specifico.
Alcuni clienti non dispongono di una connessione Internet, pertanto la sincronizzazione, in alcuni casi, deve essere effettuata tramite lo scambio di file.
Quindi, stiamo programmando di risolvere questo problema come segue:
- Ogni sistema mantiene un log delle modifiche del proprio database. Stiamo programmando di implementarlo con MongoDB.
- Quando un sistema inizializza un processo di sincronizzazione, recupera tutte le modifiche apportate da un registro. Se il sistema è B, le modifiche recuperate dipendono dalla destinazione. Quindi, il sistema li serializza in formato XML e, infine, li invia (tramite un file o una rete).
- Quando l'altro endpoint riceve il changeset, li serializza. Quindi, il sistema esegue alcune trasformazioni sui dati, che possono essere necessarie e, infine, registra le modifiche. In questo passaggio, se necessario, il sistema deve risolvere i conflitti che potrebbero esistere.
- Infine, il sistema ricevente invia le sue modifiche (e altri prodotti di risoluzione dei conflitti).
Questo approccio è fattibile, scalabile ed elegante? Quali modifiche o aggiunte faresti?