Sviluppo della sincronizzazione "reale" [chiusa]

0

Attualmente sto scrivendo un'applicazione di sincronizzazione e-mail che sincronizza la posta elettronica con un database SQL Server.

Una direzione non è un problema: recuperare cartelle dal server (con i suoi messaggi) e scriverle nel mio database.

Ciò che mi manca, però, è l'abilità "inversa": come posso rilevare quali cartelle o messaggi sono stati cancellati sul server (ad esempio da un'altra applicazione rispetto alla mia), ma sono ancora presente in il mio database ?

Come posso creare una sincronizzazione "bidirezionale"? Ho pensato di scorrere il mio set di dati corrente e cercare di trovare quei messaggi e cartelle sul server. Se esistono nel mio database, ma non sul server, avrei bisogno di eliminare questi elementi nel mio database ... Ma questo non sembra essere il modo giusto per me.

Qual è l'approccio comune per fare questo? Questo sembra essere un compito piuttosto irrilevante per la lingua.

    
posta SeToY 08.10.2014 - 14:13
fonte

3 risposte

4

Sei confuso. La sincronizzazione di due diverse istanze di dati simili richiede la conoscenza della versione corretta in caso di discrepanza.

Se un messaggio e-mail è su un lato e non sull'altro, come fai a sapere se dovresti riprodurre un "Elimina" da un lato o un "aggiungi" da un lato? Se i messaggi di posta elettronica con lo stesso ID differiscono nel loro contenuto, quale versione deve essere propagata sull'altro lato? Finché non trovi un modo deterministico di decidere, non puoi programmare un computer per risolverlo.

    
risposta data 08.10.2014 - 14:21
fonte
2

Penso che esistano solo due categorie di algoritmi:

  • Coloro che si affidano al controllo delle versioni e ai registri delle modifiche. Fondamentalmente "dammi tutti i cambiamenti avvenuti dalla versione # 1354".
  • Coloro che eseguono ampi confronti tra i dati di ciascuna parte. Questo può essere fatto in O (n) se l'ordine è lo stesso.

Per un problema client-server il primo di solito richiede meno larghezza di banda.

    
risposta data 08.10.2014 - 14:33
fonte
0

L'operazione di eliminazione registra un flag (o una data) cancellato invece di eliminare effettivamente i dati sul server, in modo che i client possano controllare se un messaggio è stato cancellato. Quindi disporre di un'attività periodica che cancella i dati che sono stati eliminati per più di Y giorni o il tempo di tracciato sincronizzato da tutti i client noti ed elimina dopo che tutti i client che potrebbero essere interessati a un messaggio eliminato si sono sincronizzati.

L'altro modo per farlo è agire come il controllo della versione mantenere lo stato corrente + un record cambia, e cancellare è solo un altro cambiamento. Quindi, quando un client si sincronizza, dice dammi tutte le modifiche da questo rev.

    
risposta data 08.10.2014 - 17:43
fonte

Leggi altre domande sui tag