Ho un progetto composto sia da un sistema locale che da un sistema remoto.
Il database tra il sistema locale e remoto deve eseguire la sincronizzazione a 2 vie. So che questo può essere ottenuto utilizzando un modello di sincronizzazione a 2 vie.
Tuttavia, il mio cliente aggiornerà la sua versione in tempi diversi, il che porta a diverse versioni della sincronizzazione del client su 1 server remoto.
Qual è la migliore pratica per gestire queste situazioni, specialmente quando lo schema cambia?
Aggiornamento 1: Scusa per la scarsa domanda che viene posta, ecco i dettagli del mio studio.
Per la sincronizzazione a 2 vie, la soluzione che ho trovato su qui corrisponde al mio requisito. Fondamentalmente, il client dovrà risolvere un conflitto se ci sono cambiamenti in conflitto.
Tuttavia, la parte più difficile è come il server remoto gestisce più client locali con diverse versioni dei dati.
I miei attuali 2 approcci sono:
aggiungi metadati, versione a.k.a per ogni record di dati.
- I dati vengono gestiti in un unico grande database.
- C'è una colonna per memorizzare l'ID client locale e la versione dei dati.
- Quando il server aggiunge nuovi dati, deve determinare la versione corrente del client, quindi trasforma i dati in quella versione.
- Quando il client locale aggiunge nuovi dati, allegherà il proprio ID e la versione corrente prima di sincronizzarsi con il server.
- Il lato server deve aggiungere un altro livello per gestire più versioni di dati quando necessario per il calcolo.
- Quando lo schema client locale viene aggiornato, eseguirò una migrazione dello schema sia locale che remoto (specifico per i dati del cliente), in modo che il mio schema locale non abbia bisogno di mantenere la retrocompatibilità dei propri dati.
Il problema con questo approccio è che non posso (forse mi sbaglio?) utilizzare un database relazionale. Devo usare il database basato su documenti perché ci sono più schemi in un unico grande database.
Poi sono andato per il secondo approccio.
crea un database per ogni cliente.
- Il mio cliente locale cresce 20 ~ 30 ogni mese, con un massimo di 60k, ancora possibile mantenere ogni database per ognuno di essi.
- Ogni client locale si sincronizzerà con il proprio database nel server remoto che ha lo stesso schema locale.
- Il lato server deve aggiungere un altro livello per gestire più versioni del database quando necessario per il calcolo.
- La sincronizzazione può essere potenzialmente eseguita a livello di database (es .: master-master).
Questa è la mia attuale scelta di approccio, ma non ho ancora molta fiducia in esso, specialmente quando il client locale esegue l'aggiornamento. Sto ancora cercando di capire se sia il server remoto che i client locali siano aggiornati correttamente.
Spero che questo spieghi meglio la mia domanda.