Condividi tramite


Informazioni sulla conoscenza di sincronizzazione

In questo argomento viene fornita una visione astratta della modalità in cui gli algoritmi di sincronizzazione di Sync Framework utilizzano la conoscenza per abilitare l'enumerazione delle modifiche e il rilevamento dei conflitti. La conoscenza rappresenta i metadati che descrivono tutte le modifiche applicate a una replica, direttamente o tramite la sincronizzazione. L'enumerazione delle modifiche è il processo tramite cui si determina quali elementi sono stati modificati nella replica di origine di cui la replica di destinazione non ha conoscenza. Il rilevamento dei conflitti è il processo tramite cui si determina quali operazioni sono state eseguite da una replica senza il trasfermimento della conoscenza della modifica all'altra replica, ad esempio quando due repliche eseguono aggiornamenti locali per lo stesso elemento.

Nota

Generalmente, le applicazioni e i provider di sincronizzazione non utilizzano direttamente la conoscenza, ma chiamano metodi di Sync Framework che richiamano operazioni di conoscenza per loro conto.

Operazioni di conoscenza

Nella tabella seguente vengono elencate e descritte le operazioni di conoscenza di sincronizzazione.

Operatore Descrizione

Contains

Determina se un oggetto conoscenza specificato contiene una versione specificata di un elemento. La versione è costituita da una chiave di replica e da un conteggio. In altre parole, consente di determinare se la replica proprietaria di questa conoscenza ha applicato tale modifica. Per questa operazione è necessario immettere ID elemento e versione.

Questa operazione viene utilizzata nell'enumerazione delle modifiche e nel rilevamento dei conflitti.

Union

Partendo da due oggetti conoscenza, crea un nuovo oggetto conoscenza che contiene esattamente lo stesso set di modifiche contenute da almeno uno degli oggetti conoscenza originali.

Questa operazione viene utilizzata durante l'applicazione di modifiche.

Project

Tramite un oggetto conoscenza specificato e un ID elemento, un ID dell'unità di modifica o un intervallo di ID elemento, genera un nuovo oggetto conoscenza che contiene le stesse modifiche dell'originale per l'ID o l'intervallo di ID specificato e nessuna modifica per gli elementi restanti.

Questa operazione viene utilizzata quando la conoscenza deve essere limitata a un elemento, un'unità di modifica o un intervallo di elementi specifico, ad esempio durante una sincronizzazione interrotta, l'invio in batch e alcune forme avanzate di sincronizzazione filtrata.

Exclude

Tramite un oggetto conoscenza specificato e un ID elemento o un ID unità di modifica, genera un nuovo oggetto conoscenza che non contiene modifiche per l'ID specificato, ma contiene le stesse modifiche dell'originale per gli elementi restanti. Questa operazione è l'opposto dell'operazione Project: un'operazione Exclude proietta la conoscenza su tutti gli elementi ad eccezione di quello specificato.

Questa operazione viene generalmente utilizzata in caso di errore nell'applicazione di modifiche.

Enumerazione delle modifiche

L'enumerazione delle modifiche viene implementata dallo sviluppatore del provider di origine. Tramite operazioni di conoscenza specificate, il funzionamento dell'enumerazione delle modifiche è il seguente:

  1. Il provider di destinazione invia la conoscenza corrente della replica di destinazione al provider di origine.

  2. Il provider di origine scorre tutti gli elementi nella replica di origine ed effettua i passaggi seguenti per ogni elemento:

    1. Stabilisce se la conoscenza di destinazione contiene la versione dell'elemento archiviato nella replica di origine.

    2. In caso contrario, include l'elemento nel batch di modifiche da inviare al provider di destinazione.

Nota

L'enumerazione delle modifiche può anche essere gestita tramite una query diretta all'archivio di elementi o tramite la combinazione di una query e di questo algoritmo, se supportato dall'archivio di elementi.

Invio delle modifiche

Le modifiche enumerate devono essere inviate dal provider di origine al provider di destinazione. A questo scopo, le modifiche vengono divise in batch e per ogni batch vengono inviate le informazioni seguenti:

  • Metadati che descrivono le modifiche stesse. Il provider aggiunge i metadati al batch per ogni modifica contenuta nel batch.

  • La conoscenza corrente, che in genere è la conoscenza corrente della replica di origine, da utilizzare nel rilevamento dei conflitti. La conoscenza corrente determina in genere le informazioni note nel momento in cui sono state apportate le modifiche. Il provider aggiunge la conoscenza corrente al batch per ogni gruppo di modifiche aggiunto al batch.

  • Conoscenza acquisita. Si tratta della conoscenza corrente della replica di origine proiettata nel subset degli elementi inviati in questo batch e dei conflitti registrati. La conoscenza acquisita determina le informazioni apprese nel momento in cui vengono applicate le modifiche. Sync Framework calcola la conoscenza acquisita per conto del provider.

Nota

È possibile elaborare in parallelo l'invio in batch e l'enumerazione delle modifiche poiché per l'invio in batch non è necessario attendere la conclusione dell'enumerazione delle modifiche.

Ordinamento

In base all'ordine di invio delle modifiche, la proiezione della conoscenza negli elementi del batch può richiedere un tempo più o meno lungo. Ad esempio, la conoscenza supporta intervalli di ID elemento. Di conseguenza, se le modifiche vengono inviate nell'ordine degli ID elemento ai quali si applicano, la proiezione della conoscenza sarà molto efficiente.

Indipendentemente dall'ordinamento, tramite l'operazione Project è sempre possibile proiettare la conoscenza nel batch inviato.

Errori

Quando il provider di origine non è in grado di inviare un elemento enumerato, l'elemento deve essere escluso dalla conoscenza acquisita inviata. Questa operazione viene eseguita tramite l'operatore Exclude.

Rilevamento dei conflitti

Il rilevamento dei conflitti è gestito dai componenti di Sync Framework, ad esempio NotifyingChangeApplier (per codice gestito) o ISynchronousNotifyingChangeApplier (per codice non gestito).

Dopo la ricezione da parte del provider di destinazione di un batch di modifiche che contiene la conoscenza acquisita e quella corrente del batch, per ciascuna modifica del batch è necessario considerare quanto segue:

  • Determinare se la modifica è in conflitto con la versione corrente dell'elemento archiviato nella replica di destinazione.

  • Determinare se la modifica è obsoleta (sostituita dalla versione corrente dell'elemento archiviato nella replica di destinazione).

È semplice dare una risposta a queste considerazioni:

  • Una modifica è in conflitto con la versione corrente quando la versione dell'elemento archiviato nella replica di destinazione non è contenuta nella conoscenza della replica di origine.

  • Una modifica è obsoleta quando la versione è contenuta nella conoscenza della replica di destinazione.

    Nota

    In circostanze normali, le modifiche obsolete non vengono inviate. Tuttavia, la presenza di race condition può causare l'invio di queste modifiche. Di conseguenza, Sync Framework deve rilevarle e gestirle.

Applicazione di modifiche

Dopo aver ricevuto le modifiche e rilevato i conflitti, le modifiche possono essere applicate alla replica di destinazione. In questa fase, il provider di destinazione effettua i passaggi seguenti:

  1. Regola la conoscenza acquisita del batch di modifiche per situazioni che si sono verificate localmente:

    1. Se è stato applicato un solo subset di modifiche a causa di interruzioni o annullamenti, imposta un errore reversibile per ogni modifica non applicata. Sync Framework utilizza l'operatore Project per limitare la conoscenza acquisita a quest'unico set.

    2. Se l'applicazione di alcune modifiche non è riuscita a causa di problemi relativi a DRM (Digital Rights Management), ad esempio in caso di oggetti bloccati, il provider di destinazione imposta un errore reversibile per ogni modifica non applicata. Sync Framework utilizza l'operatore Exclude per rimuovere le modifiche non riuscite dalla conoscenza acquisita.

    3. Se sono stati rilevati conflitti che non sono stati risolti, Sync Framework utilizza l'operatore Exclude per rimuoverli.

  2. Sostituisce la conoscenza della replica di destinazione con la conoscenza di destinazione aggiornata calcolata da Sync Framework.

Vedere anche

Concetti

Gestione dei metadati per provider standard
Enumerazione delle modifiche
Gestione dei conflitti
Applicazione delle modifiche