Descripción del conocimiento de sincronización

En este tema se proporciona una visión abstracta del modo en que los algoritmos de sincronización de Sync Framework utilizan el conocimiento para habilitar la enumeración de cambios y la detección de conflictos. El conocimiento son los metadatos que describen todos los cambios que se han aplicado a una réplica, ya sea directamente o a través de la sincronización. La enumeración de cambios es el proceso que determina qué elementos se han cambiado en la réplica de origen de los que la réplica de destino no tiene conocimiento. La detección de conflictos es el proceso que determina qué operaciones realizó una réplica sin transferir el conocimiento del cambio a la otra réplica, por ejemplo, cuando dos réplicas efectúan actualizaciones locales en el mismo elemento.

Nota

Generalmente, los proveedores de sincronización y las aplicaciones no utilizarán el conocimiento directamente. En su lugar, llamarán a los métodos de Sync Framework que invocan las operaciones de conocimiento en su nombre.

Operaciones con el conocimiento

En la tabla siguiente se enumeran y describen las operaciones con el conocimiento de la sincronización.

Operador Descripción

Contiene

Determina si un objeto de conocimiento determinado contiene una versión especificada de un elemento. Una versión contiene una clave de réplica y un contador. En otras palabras, se determina si la réplica que posee este conocimiento ha aplicado este cambio. El identificador de elemento y la versión son entradas necesarias para esta operación.

Esta operación se utiliza en la enumeración de los cambios y en la detección de conflictos.

Unión

A partir de dos objetos de conocimiento se construye un nuevo objeto de conocimiento que contiene exactamente el mismo conjunto de cambios que incluye al menos uno de los objetos de conocimiento originales.

Esta operación se utiliza durante la aplicación de los cambios.

Proyección

Utilizando un objeto de conocimiento y un identificador de elemento, un identificador de unidad de cambio o un intervalo de identificadores de elementos especificados, se genera un nuevo objeto de conocimiento que contiene los mismos cambios que el original para el identificador o intervalo de identificadores especificados, y nada para el resto de los elementos.

Esta operación se utiliza cuando el conocimiento debe restringirse a un elemento, unidad de cambio o intervalo de elementos determinados; por ejemplo, durante un procesamiento por lotes o una sincronización interrumpida y algunas formas avanzadas de sincronización filtrada.

Exclusión

Utilizando un objeto de conocimiento y un identificador de elemento o identificador de unidad de cambio especificados, se genera un nuevo objeto de conocimiento que no contiene nada para el identificador especificado y los mismos cambios que el original para resto de los elementos. Esta es la operación opuesta a la operación de proyección: una operación de exclusión proyecta el conocimiento en todos los elementos excepto en el especificado.

Esta operación se suele usar durante los errores de la aplicación de cambios.

Enumeración de cambios

El desarrollador del proveedor de origen implementa la enumeración de los cambios. Mediante las operaciones de conocimiento especificadas, la enumeración de cambios funciona como sigue:

  1. El proveedor de destino envía el conocimiento actual de la réplica de destino al proveedor de origen.

  2. El proveedor de origen recorre todos los elementos de la réplica de origen y realiza los pasos siguientes para cada elemento:

    1. Determina si el conocimiento de destino contiene la versión del elemento que está almacenada en la réplica de origen.

    2. En caso contrario, incluye el elemento en el lote de cambios para enviar al proveedor de destino.

Nota

La enumeración de cambios también se puede realizar utilizando una consulta directa en el almacén de elementos o utilizando una combinación de una consulta y este algoritmo, si el almacén de elementos lo admite.

Envío de los cambios

Los cambios enumerados se deben enviar del proveedor de origen al proveedor de destino. Para ello, los cambios se dividen en lotes; y para cada lote se envía la información siguiente:

  • Los metadatos que describen los propios cambios. El proveedor agrega metadatos al lote para cada cambio contenido en él.

  • El conocimiento que da origen al cambio, que suele ser el conocimiento actual de la réplica de origen, que se va a usar en la detección de conflictos. El conocimiento que da origen al cambio responde a la cuestión: ¿qué sabía cuándo realizó estos cambios? El proveedor agrega al lote el conocimiento que da origen al cambio para cada grupo de cambios agregados al lote.

  • El conocimiento aprendido. Se trata del conocimiento actual de la réplica de origen proyectado en el subconjunto de los elementos que se envían en este lote y también los conflictos registrados. El conocimiento aprendido responde a la cuestión: ¿sobre qué obtendré información cuándo aplique estos cambios? Sync Framework calcula el conocimiento aprendido en nombre del proveedor.

Nota

El procesamiento por lotes y la enumeración de los cambios se pueden procesar en paralelo porque el procesamiento por lotes no tiene que esperar a que la enumeración de cambios finalice.

Orden

En función del orden en el que se envían los cambios, proyectar el conocimiento en los elementos del lote puede tardar más o menos. Por ejemplo, el conocimiento admite intervalos de identificadores de elementos. Por consiguiente, si los cambios se envían en el orden de los identificadores de elemento a los que se aplican, la proyección del conocimiento será muy eficaz.

Independientemente del orden, la operación de proyecto puede proyectar siempre el conocimiento en el lote que se envía.

Errores

Cuando el proveedor de origen no puede enviar un elemento que se enumeró, este se debe excluir del conocimiento aprendido que se envía. Para ello se usa el operador de exclusión.

Detección de conflictos

Los componentes de Sync Framework, como NotifyingChangeApplier (en el código administrado) o ISynchronousNotifyingChangeApplier (en el código no administrado) administran la detección de conflictos.

Una vez que el proveedor de destino ha recibido un lote de cambios, que contiene el conocimiento aprendido para el lote, deben determinarse las cuestiones siguientes para cada cambio del mismo:

  • ¿Está en conflicto este cambio con la versión actual de un elemento almacenado en la réplica de destino?

  • ¿Está obsoleto este cambio (ha sido reemplazado con la versión actual del elemento que está almacenado en la réplica de destino)?

Responder a estas preguntas es sencillo:

  • Un cambio está en conflicto con la versión actual cuando la versión del elemento almacenado en la réplica de destino no está incluida en el conocimiento de la réplica de origen.

  • Un cambio está obsoleto cuando su versión está incluida en el conocimiento de la réplica de destino.

    Nota

    En circunstancias normales, los cambios obsoletos no se envían. Sin embargo, las condiciones de carrera pueden ocasionar que estos cambios se envíen. Por consiguiente, Sync Framework debe detectarlas y controlarlas.

Aplicación de los cambios

Una vez recibidos los cambios y detectados los conflictos, los cambios pueden aplicarse a la réplica de destino. En este momento, el proveedor de destino sigue estos pasos:

  1. Ajusta el conocimiento aprendido del lote de cambios con respecto a lo que sucedió de forma local:

    1. Si solo se aplicó un subconjunto de cambios debido a interrupciones o cancelaciones, establece un error recuperable para cada cambio que no se aplicó. Sync Framework usa el operador de proyección para restringir el conocimiento aprendido únicamente a este conjunto.

    2. Si se produjera un error en la aplicación de algunos cambios debido a problemas de la Administración de derechos digitales (DRM), por ejemplo si algunos objetos se bloquean, el proveedor de destino establece un error irrecuperable para cada cambio que no se aplicó. Sync Framework utiliza el operador de exclusión para quitar del conocimiento aprendido los cambios que no se han podido aplicar.

    3. Si se detectó algún conflicto y no se resolvió, Sync Framework utiliza el operador de exclusión para quitarlos también.

  2. Reemplaza el conocimiento de la réplica de destino con el conocimiento de destino actualizado que calculó Sync Framework.

Vea también

Conceptos

Administrar metadatos para proveedores estándar
Enumerar los cambios
Controlar los conflictos
Aplicar los cambios