metodi o documenti del servizio web di sincronizzazione [chiuso]

1

Sto costruendo un servizio web (PHP + JSON) per sincronizzarmi con la mia app per iPhone. Gli obiettivi principali sono:

  1. Backup
  2. Fornisci una visualizzazione Web per la stampa / l'ordinamento, la manipolazione.
  3. consenti a un gruppo di sincronizzarsi su e giù.

Sono consapevole dei problemi logici con tutti questi elementi, Ie. se una persona cancella qualcosa, si mantiene questa modifica ad altri utenti, collisioni, ecc.

Sto cercando qualsiasi libro o lavoro accademico, o anche parole di saggezza per affrontare problemi comuni.

  • quando rilevare le modifiche dei dati con hash, vs date modificate o combinazione.
  • In che modo il consolidamento degli indirizzi di ID sequenziali provenienti da diversi nodi client (può essere spostato lateralmente nel mio contesto, ma sarebbe interessante).
  • affrontare le collisioni (esiste un modo universalmente sicuro per farlo?).
  • best practice generali
  • come strutturare la transazione dei dati effettivi (chiedere l'elenco completo quindi rilevare le modifiche ...)
posta Grady Player 20.07.2011 - 22:30
fonte

1 risposta

1

Quindi, in sintesi, le tue domande riguardano la sincronizzazione disconnessa.

Quindi ecco cosa penso che dovrebbe accadere:

Sincronizzazione iniziale Recuperate i dati e tutte le informazioni ad essi associate (versioni di righe, checksum dei file ecc.). è importante conservare queste informazioni e lasciarle intatte fino alla successiva sincronizzazione di successo. Le modifiche dovrebbero essere fatte su una COPIA di questi dati.

Monitoraggio delle modifiche Se hai a che fare con le righe del database, l'idea è che devi fondamentalmente tenere traccia delle operazioni di inserimento, aggiornamento ed eliminazione. Se hai a che fare con file di testo come xml, è leggermente più complicato. Se è probabile che più utenti modifichino questo file allo stesso tempo, è necessario disporre di uno strumento diff, in modo che i conflitti possano essere rilevati in un livello più granulare (anziché nell'intero file).

Verifica dei conflitti Di nuovo, se si tratta solo di righe del database, i conflitti sono facili da rilevare. Puoi avere un'altra colonna che incrementa ogni volta che la riga viene aggiornata (penso che mssql abbia questo builtin non sicuro di mysql). Quindi se la copia che hai ha un numero diverso da quello che c'è sul server, allora hai un conflitto. Per i file o le stringhe, un checksum farà il lavoro. Suppongo che potresti anche usare la data modificata, ma assicurati di avere una misurazione molto precisa e accurata per evitare errori. per esempio: diciamo che recupero un file e lo salvi non appena l'ho recuperato. Diciamo che la differenza di tempo è 1 millisecondo. Quindi apporto le modifiche al file, quindi provo a salvarlo. Se il tempo dell'ultima registrazione registrato è preciso solo per 10 millisecondi, c'è una buona possibilità che il file che ho recuperato abbia la stessa data di modifica di quella che hai salvato, quindi il programma pensa che non ci siano conflitti e sovrascrive le tue modifiche. Quindi generalmente non uso questo metodo solo per essere al sicuro. D'altra parte le probabilità di una collisione di checksum / hash dopo una piccola modifica non sono vicine a nessuna.

Risoluzione dei conflitti Questa è la parte difficile. Se si tratta di un processo automatico, è necessario valutare la situazione e decidere se si desidera sovrascrivere le modifiche, perdere le modifiche o recuperare nuovamente i dati dal server e tentare di ripetere le modifiche. Fortunatamente per te, sembra che ci sarà l'interazione umana. Ma è ancora molto doloroso da codificare. Se hai a che fare con le righe del database, puoi controllare ogni singola colonna e confrontarla con i dati nel server e presentarla all'utente. L'idea è di presentare i conflitti all'utente in un modo molto granulare in modo da non sopraffarli. La maggior parte dei conflitti ha differenze molto piccole in molti luoghi diversi, quindi presentatela all'utente una piccola differenza alla volta. Quindi, per i file di testo, è quasi lo stesso ma più di cento volte più complicato. Quindi, in pratica, dovresti creare o utilizzare uno strumento diff (Il confronto del testo è un argomento completamente diverso ed è troppo ampio per essere menzionato qui) che ti consente di conoscere le piccole modifiche nel file e dove si trovano in un modo simile a quello di un database: dove il testo è stato inserito, cancellato o modificato. Quindi presentalo all'utente nello stesso modo. quindi fondamentalmente per ogni piccolo conflitto, l'utente dovrebbe scegliere se annullare le modifiche, sovrascrivere le modifiche nel server o eseguire una modifica manuale prima di inviarlo al server.

Quindi se hai fatto le cose giuste, l'utente dovrebbe avere una lista di conflitti se ce ne sono. Questi conflitti dovrebbero essere abbastanza dettagliati da consentire all'utente di decidere rapidamente. Quindi, ad esempio, il conflitto è un cambiamento di ortografia, sarebbe più facile per l'utente scegliere l'ortografia di parole in contrasto con il dare all'intero l'intero paragrafo e dirgli che c'era un cambiamento e che devono decidere cosa fare , l'utente dovrebbe quindi cercare questo piccolo errore ortografico.

Altre considerazioni: Convalida dei dati: tieni presente che devi eseguire la convalida dopo aver risolto i conflitti poiché i dati potrebbero essere cambiati Confronto di testo - come ho detto, questo è un grande argomento. quindi google! Sincronizzazione della sincronizzazione - Penso che ci siano alcuni articoli là fuori. troppo pigro per cercarli ora: c

    
risposta data 24.11.2011 - 11:17
fonte

Leggi altre domande sui tag