Stiamo sviluppando due sistemi correlati. Uno di questi (A) verrà installato sulle macchine dei nostri clienti. Il resto (B) sarà utilizzato dalla mia organizzazione.
Ogni sistema ha il proprio 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 hanno una connessione a Internet, quindi la sincronizzazione, in alcuni casi, deve essere effettuata tramite lo scambio di file.
Quindi, stiamo pianificando di risolvere questo problema come segue:
- Ogni sistema mantiene un log delle modifiche del suo database. Stiamo progettando 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, esso non viene serializzato. 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?