Nel mondo di oggi in cui molti computer, dispositivi mobili o servizi Web condividono dati o agiscono come hub, la sincronizzazione diventa più importante. Come tutti sappiamo, le soluzioni che la sincronizzazione non sono le più comode ed è meglio non sincronizzarle affatto.Qual è l'approccio più intelligente e facile per sincronizzare i dati tra più entità?
Sono ancora curioso di sapere come implementare una soluzione di sincronizzazione per la sincronizzazione tra più entità. Esistono già molti approcci diversi, come confrontare un campo data modificato o un hash e utilizzare i dati più recenti o lasciare che l'utente scelga ciò che vuole utilizzare in caso di conflitto. Un altro approccio è quello di provare ad unire automaticamente i dati in conflitto (che a mio avviso non è così intelligente, perché una macchina non può indovinare cosa volesse dire l'utente).
In ogni caso, qui ci sono un paio di domande relative alla sincronizzazione che dobbiamo rispondere prima di iniziare a implementare la sincronizzazione:
- Quali sono i dati più recenti? Come voglio rappresentarlo?
- Cosa faccio in caso di conflitto? Unire? Chiedo e chiedo all'utente cosa deve fare?
- Cosa faccio quando arrivo in uno stato incoerente (ad esempio una disconnessione dovuta a una connessione di rete mobile di tipo "flakey")?
- Cosa devo fare quando non voglio entrare in uno stato incoerente?
- Come si ripristina una sincronizzazione corrente interrotta?
- Come gestisco l'archiviazione dei dati (ad esempio database MySQL su un servizio Web, dati di base su un iPhone e come faccio a unire/sincronizzare i dati senza un sacco di codice di colla)?
- Come devo gestire le modifiche da parte dell'utente che si verificano durante la sincronizzazione (che viene eseguita in background, quindi l'interfaccia utente non è bloccata)?
- Come e in quale direzione propagare le modifiche (ad esempio, un utente crea una voce "Foo" sul suo computer e non si sincronizza, quindi è in movimento e crea un'altra voce "Foo", cosa succede quando prova a sincronizzare entrambi i dispositivi)? L'utente avrà due voci "Foo" con ID univoci diversi? L'utente avrà solo una voce, ma quale?
- Come devo gestire la sincronizzazione quando ho dati gerarchici? Dall'alto al basso? Dal basso verso l'alto? Tratto ogni voce atomicamente o guardo solo un supernodo? Quanto è grande il trade-off tra semplificare le cose e investire troppo tempo nell'implementazione?
- ...
Ci sono un sacco di altre domande e spero che ho potuto ispirare abbastanza. La sincronizzazione è un problema abbastanza generale. Una volta trovato un buon e versatile approccio di sincronizzazione, dovrebbe essere più semplice applicarlo a un'applicazione concreta, piuttosto che iniziare a pensare da zero. Mi rendo conto che esistono già molte applicazioni che tentano di risolvere (o risolvere con successo) la sincronizzazione, ma sono già abbastanza specifiche e non forniscono risposte sufficienti agli approcci di sincronizzazione in generale.
Si prega di aiutare a introdurre alcuni algoritmi di sincronizzazione, grazie! – Charles0429
Sì, si prega di condividere qualsiasi algoritmo per facilitare questo. –
Penso che No1 dovrebbe essere al contrario, il client dovrebbe determinare i candidati per la sincronizzazione e non il server. ad esempio sul mio dispositivo LAST_UPDATED_DATE sono le 2:00 pm, quindi ho apportato modifiche alle 14:10 mentre offline, ma un mio collega ha aggiornato lo stesso record @ 2:30 pm e si è salvato, LAST_UPDATED_DATE sul server è ora alle 2:30 del pomeriggio, vorrei perdere le modifiche apportate alle 14:10 se il server deve determinare i candidati alla sincronizzazione. –