Tipos de conflito e políticas de resolução ao usar várias regiões de gravação

APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table

Conflitos e políticas de resolução de conflitos são aplicáveis se a conta do Azure Cosmos DB for configurada com várias regiões de gravação.

Para contas do Azure Cosmos DB configuradas com várias regiões de gravação, os conflitos de atualização podem ocorrer quando gravadores atualizam simultaneamente o mesmo item em várias regiões. Os conflitos de atualização podem ser dos três tipos a seguir:

  • Conflitos de inserção: esses conflitos podem ocorrer quando um aplicativo insere simultaneamente dois ou mais itens com o mesmo índice exclusivo (por exemplo, a propriedade ID) de duas ou mais regiões. Por exemplo, esse conflito pode ocorrer com uma propriedade de ID.

  • Conflitos de substituição: esses conflitos podem ocorrer quando um aplicativo atualiza o mesmo item simultaneamente em duas ou mais regiões.

  • Conflitos de exclusão: esses conflitos podem ocorrer quando um aplicativo exclui simultaneamente um item de uma região e o atualiza em outra região.

Políticas de resolução de conflitos

O Azure Cosmos DB oferece um mecanismo flexível orientado por diretivas para resolver conflitos de gravação. Você pode selecionar as duas políticas de resolução de conflitos a seguir em um contêiner do Azure Cosmos DB:

  • A LWW (Última Gravação Vence) : essa política de resolução, por padrão, usa uma propriedade de carimbo de hora definida pelo sistema. Ele se baseia no protocolo de sincronização de hora de relógio. Se você usar a API do NoSQL, poderá especificar outra propriedade numérica personalizada (por exemplo, um carimbo de data/hora do seu entendimento) a ser usada para resolução de conflitos. Uma propriedade numérica personalizada também é conhecida como o caminho de resolução de conflitos.

    Se dois ou mais itens entram em conflito ou substituem operações, o item com o valor mais alto para o "caminho de resolução de conflitos" torna-se o "vencedor". O sistema determina o ganhador se vários itens tiverem o mesmo valor numérico para o caminho de resolução de conflito. Todas as regiões vão convergir para um único vencedor e terminarão com a versão igual do item confirmado. Ao excluir conflitos que estão envolvidos, a versão excluída sempre supera o inserir ou substituir os conflitos. Esse resultado ocorre independentemente do valor do caminho de resolução de conflito.

    Observação

    A Última Gravação Vence é a política de resolução de conflitos padrão e usa o carimbo de data/hora _ts para as seguintes APIs: SQL, MongoDB, Cassandra, Gremlin e Table. A propriedade numérica personalizada está disponível somente para a API do NoSQL.

    Para saber mais, confira exemplos que usam políticas de resolução de conflitos LWW.

  • Personalizada: essa política de resolução é projetada para semântica definida pelo aplicativo para reconciliação de conflitos. Ao definir essa política no contêiner do Azure Cosmos DB, você também precisará registrar um procedimento armazenado de mesclagem. Esse procedimento é invocado automaticamente quando os conflitos são detectados em uma transação de banco de dados no servidor. O sistema fornece exatamente uma garantia para a execução de um procedimento de mesclagem como parte do protocolo de confirmação.

    Se você configurar o contêiner com a opção de resolução personalizada mas falhar ao registrar um procedimento de mesclagem no contêiner ou se o procedimento de mesclagem gerar uma exceção em runtime, os conflitos serão gravados no feed de conflitos. Seu aplicativo precisará resolver manualmente os conflitos no feed de conflitos. Para saber mais, confira exemplos de como usar uma política de resolução personalizada e de como usar o feed de conflitos.

    Observação

    A política personalizada de resolução de conflitos só está disponível para as contas da API do NoSQL e só pode ser definida no momento da criação. Não é possível definir uma política de resolução personalizada em um contêiner existente.

Próximas etapas

Saiba como configurar políticas de resolução de conflito: