Dati offline che dovranno essere importati in seguito

2

La mia applicazione esistente è un'applicazione Winform .NET 3.0 che comunica con un servizio WCF che a sua volta aggiorna un database MS SQL Server; Posso apportare modifiche in tutti i punti (client Windows, WCF, server). Ho avuto un'inchiesta sulla possibilità di consentire agli utenti di lavorare offline e successivamente di sincronizzare i loro dati. Sono preoccupato per i dati obsoleti soprattutto perché i dati non sono "posseduti" da loro e un altro utente potrebbe aver aggiornato lo stesso record mentre erano offline. Uso anche NHibernate per il mio ORM.

Quali sono i tuoi pensieri riguardo alla migliore implementazione per aggiungere una funzione di sincronizzazione?

    
posta UnhandledExcepSean 09.12.2011 - 13:41
fonte

3 risposte

3

La logistica attuale non è troppo complicata (data dell'ultima modifica su ogni record e un timestamp "disconnected-since" o "last-synced" memorizzato da qualche parte), il vero problema sarà probabilmente il tuo conflitto tecnica di risoluzione. Cosa dovrebbe fare il sistema quando due persone modificano lo stesso campo nello stesso record?

Suggerirei di registrare tutte le modifiche offline apportate al database, quindi provare semplicemente a riprodurre o applicare tali modifiche alla successiva sincronizzazione dell'utente. Probabilmente è più efficiente del semplice controllo di ogni tabella per vedere se sono state apportate modifiche dall'ultima sincronizzazione. È anche possibile memorizzare sia i vecchi che i nuovi valori per tutti i campi che sono stati modificati. Ciò aiuterebbe con la risoluzione dei conflitti, dal momento che è ancora possibile aggiornare tutti i campi che contenevano ancora i loro vecchi valori, anche se la data dell'ultima modifica indicava che il record era stato modificato.

    
risposta data 09.12.2011 - 14:24
fonte
1

Le tue esigenze sono ideali per Microsoft Sync Framework . Tranne che per il bit di NHibernate, Sync Framework deve aggiungere alcune colonne ai dati per gestire la sincronizzazione e quelle in più "non giocano bene" con NHibernate. Un precedente datore di lavoro aveva un sistema di sincronizzazione sviluppato internamente, e ci sono molti casi limite di cui preoccuparsi, inclusi gli aggiornamenti che continuano ad andare avanti (l'elemento X dei dati viene aggiornato sul computer A, sincronizzato sul computer B, quindi è raccolto come una modifica e rimandato ad A, che poi lo rimanda a B, e così via). Se davvero devi creare il tuo sistema e ti sconsiglio vivamente, ti consiglio di dare un'occhiata a SyncML . Penso che il volume 4 di Pattern Languages of Program Design abbia un capitolo su un pattern di sincronizzazione.

    
risposta data 09.12.2011 - 19:03
fonte
0

Il cambiamento nella realtà è la finestra temporale associata all'aggiornamento dei dati. Se i dati possono essere aggiornati da più utenti oggi; la concorrenza, il blocco a livello di DB, ecc ... dovrebbero già essere presenti. Successivamente, l'ora in cui un utente conserva i dati prima di aggiornare il database è in qualche modo irrilevante.

A meno che tu non offra un'opzione di fusione, la sincronizzazione dovrebbe essere banale. Il database vince o l'utente vince, consente che tale scelta venga effettuata dall'utente.

    
risposta data 09.12.2011 - 15:00
fonte

Leggi altre domande sui tag