Un algoritmo per una sincronizzazione

1

Voglio fare una sincronizzazione. Qual è l'algoritmo per questo in poche parole?

1) Un client legge i dati locali e li invia a un server in seguito . Il server li confronta con i suoi dati effettivi, decide cosa è più recente e sovrascrive i suoi dati con i dati ricevuti nel caso in cui i dati ricevuti siano più recenti.

o

2) Un client legge i dati dal server prima , li confronta con i dati locali e nel caso in cui i dati dal server siano più recenti, li sovrascrive con i dati del server.

E l'ordine è importante?

    
posta アレックス 27.11.2013 - 08:51
fonte

2 risposte

4

You should look at how distributed change management works. Look at SVN, CVS and other repositories that manage deltas work.

You have several use cases.

  1. Synchronize changes. Clients send their deltas to the server; server consolidates and distributes the deltas to the clients. This is the typical case. Databases call this "transaction replication".

  2. Client has lost synchronization. In this case, the client needs to get the current state from the server without going through the deltas. This is a copy from master to detail, deltas and performance be damned.

  3. Client is suspicious. In this case, you need to compare client against server to determine if the client is up-to-date and needs any deltas.

You should follow the database (and SVN) design pattern of sequentially numbering every change. That way a client can make a trivial request ("What revision should I have?") before attempting to synchronize. And even then, the query ("All deltas since 2149") is delightfully simple for the client and server to process.

Risposta originale: link

    
risposta data 23.05.2017 - 14:40
fonte
2

In poche parole, è un problema difficile. Source Control non lo risolve molto bene - richiedono ancora un intervento manuale quando non sa cosa fare. Spesso usare una libreria che lo implementa per te è la strada da percorrere. Scopri cosa è necessario fornire per consentire alle librerie di terze parti di identificare i conflitti e quindi determinare come possono essere risolti. Alcuni software rifiutano i conflitti in modo definitivo - guarda bugzilla. Se un problema viene modificato tra la ricezione del bug nel browser e l'invio di un commento, rifiuta l'aggiornamento.

Indipendentemente dal fatto che il client o il server determini un conflitto non ha importanza. A un certo punto si verificherà e sarà necessario 1) rilevarlo e 2) sapere cosa si intende fare in tutti i casi di conflitto.

Devo aggiungere che ho preparato il mio schema di sincronizzazione per i dati e mi sono rammaricato di non utilizzare librerie di terze parti.

    
risposta data 27.11.2013 - 16:42
fonte

Leggi altre domande sui tag