Compartilhar via


Noções básicas sobre conhecimento de sincronização

Este tópico fornece uma exibição abstrata de como os algoritmos de sincronização do Sync Framework usam o conhecimento para permitir a enumeração de alterações e a detecção de conflitos. O conhecimento é composto pelos metadados que descrevem todas as alterações que foram aplicadas a uma réplica, diretamente ou por sincronização. A enumeração de alterações é o processo de determinar quais itens foram alterados na réplica de origem sobre a qual a réplica de destino não tem conhecimento. A detecção de conflitos é o processo de determinar quais operações foram feitas através de uma réplica sem transferir o conhecimento da alteração a outra réplica, por exemplo, quando duas réplicas fizerem atualizações locais ao mesmo item. 

Dica

Geralmente, os provedores de sincronização e aplicativos não usarão o conhecimento diretamente. Em vez disso, eles chamarão métodos do Sync Framework que invocam operações de conhecimento em seus nomes.

Operações de conhecimento

A tabela a seguir lista e descreve as operações de conhecimento de sincronização.

Operador

Descrição

Contém

Determina se um objeto de conhecimento especificado contém uma versão especificada de um item. (Versão é uma chave de réplica e uma contagem em escala.) Em outras palavras, determina se a réplica que tem este conhecimento aplicou essa alteração. O item de ID e a versão são entradas necessárias para esta operação.

Esta operação é usada na enumeração de alterações e detecção de conflitos.

União

A partir de dois objetos de conhecimento, constrói um novo objeto de conhecimento que contém exatamente o mesmo conjunto de alterações contido por pelo menos um dos objetos de conhecimento originais.

Esta operação é usada durante a aplicação de alteração.

Projeto

Usando um objeto de conhecimento especificado e uma ID de item, uma ID de unidade de alteração ou um intervalo de IDs de item, gera um novo objeto de conhecimento que contém as mesmas alterações que o original para a ID ou o intervalo de IDs especificado e nada para o resto dos itens.

Esta operação é usada quando o conhecimento deve ser restrito a um item específico, uma unidade de alteração ou um intervalo de itens; por exemplo, durante uma sincronização interrompida, um envio em lote e algumas formas avançadas de sincronização filtrada.

Excluir

Usando um objeto de conhecimento especificado e uma ID de item ou ID de unidade de alteração, gera um novo objeto de alteração que contém nada para a ID especificada, mas contém as mesmas alterações que o original para o resto dos itens. Esta operação é o oposto da operação de projeção: uma operação de exclusão projeta o conhecimento em tudo menos no item especificado.

Esta operação é usada tipicamente durante falhas em aplicações de alterações.

Enumeração de alterações

A enumeração de alterações é implementada pelo desenvolvedor do provedor de origem. Ao usar as operações de conhecimento especificadas, a enumeração de alterações funciona da seguinte forma:

  1. O provedor de destino envia o conhecimento atual da réplica de destino para o provedor de origem.

  2. O provedor de origem itera por todos os itens na réplica de origem e executa as seguintes etapas para cada item:

    1. Determina se o conhecimento de destino contém a versão de item armazenada na réplica de origem.

    2. Caso contrário, inclui o item no lote de alterações a ser enviado para o provedor de destino.

Dica

A enumeração de alterações também pode ser tratada usando uma consulta direta no repositório de itens ou usando uma combinação de uma consulta e este algoritmo, se o repositório de itens fornecer suporte.

Envio de alterações

As alterações enumeradas devem ser enviadas do provedor de origem para o provedor de destino. Para fazer isto, as alterações são divididas em lotes e, para todo lote, as informações a seguir são enviadas:

  • Os metadados que descrevem as alterações. O provedor adiciona metadados ao lote para cada alteração contida neste.

  • O conhecimento atual, que é tipicamente o conhecimento atual da réplica de origem, que será usado na detecção de conflitos. O conhecimento atual responde a pergunta: o que você sabia quando efetuou essas alterações? O provedor adiciona o conhecimento atual ao lote para cada grupo de alterações adicionado a este.

  • O conhecimento adquirido. Este é o conhecimento atual da réplica de origem projetada no subconjunto dos itens que estão sendo enviados neste lote, assim como os conflitos registrados. O conhecimento adquirido responde à pergunta: o que aprenderei ao aplicar essas alterações? O Sync Framework computa o conhecimento adquirido em nome do provedor.

Dica

O envio em lote e a enumeração de alterações podem ser processados em paralelo, pois o envio em lotes não precisa esperar pela enumeração de alterações para ser concluído.

Ordenação

Dependendo da ordem em que as alterações são enviadas, a projeção do conhecimento sobre os itens no lote pode levar mais ou menos tempo para ser executada. Por exemplo, o conhecimento suporta intervalos de ID de item. Portanto, se as alterações forem enviadas na ordem das IDs de item às quais se aplicam, a projeção de conhecimento será muito eficiente.

Seja qual for a ordenação, a operação de projeção sempre pode projetar conhecimento no lote que está sendo enviado.

Erros

Quando o provedor de origem não puder enviar um item que foi enumerado, o item deverá ser excluído do conhecimento adquirido enviado. Isso pode ser feito usando o operador de exclusão.

Detecção de conflitos

A detecção de conflitos é tratada pelos componentes do Sync Framework, como NotifyingChangeApplier (para código gerenciado) ou ISynchronousNotifyingChangeApplier (para código não gerenciado).

Depois que o provedor de destino tiver recebido um lote de alterações, que contém o conhecimento adquirido e atual do lote, devem ser feitas as determinações a seguir para cada alteração no lote:

  • Esta alteração está conflitando com a versão atual do item armazenado na réplica de destino?

  • Esta alteração está obsoleta (substituída pela versão atual do item que está armazenado na réplica de destino)?

A resposta destas perguntas é simples:

  • Uma alteração entra em conflito com a versão atual quando a versão no item armazenado na réplica de destino não está contida no conhecimento da réplica de origem.

  • Uma alteração se torna obsoleta quando sua versão está contida no conhecimento da réplica de destino.

    Dica

    Sob circunstâncias típicas, não são enviadas alterações obsoletas. No entanto, situações de competição podem fazer com que estas alterações sejam enviadas. Portanto, o Sync Framework deve detectá-las e tratá-las.

Aplicação de alterações

Depois que as alterações forem recebidas e conflitos forem detectados, as alterações podem ser se aplicadas à réplica de destino. Nesse momento, o provedor de destino executa as seguintes etapas:

  1. Ajusta o conhecimento adquirido do lote de alteração por coisas que ocorreram localmente:

    1. Se somente um subconjunto de alterações foi aplicado devido a interrupções ou cancelamentos, define um erro recuperável para cada alteração que não foi aplicada. O Sync Framework usa o operador de projeção para restringir o conhecimento adquirido somente para este conjunto.

    2. Se a aplicação de algumas alterações falhou devido a problemas do gerenciamento de direitos digitais (DRM), como objetos travados, o provedor de destino define um erro recuperável para cada alteração que não foi aplicada. O Sync Framework usa o operador de exclusão para remover as alterações com falhas do conhecimento adquirido.

    3. Se quaisquer conflitos forem detectados e não resolvidos, o Sync Framework usa o operador de exclusão para removê-los.

  2. Substitui o conhecimento da réplica de destino com o conhecimento de destino atualizado computado pelo Sync Framework.

Consulte também

Outros recursos

Gerenciando metadados para provedores padrão

Enumerando alterações

Manipulando conflitos

Aplicando alterações