Partilhar via


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

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

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

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

  • Inserir conflitos: esses conflitos podem ocorrer quando um aplicativo insere simultaneamente dois ou mais itens com o mesmo índice exclusivo em duas ou mais regiões. Por exemplo, esse conflito pode ocorrer com uma propriedade ID.

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

  • Excluir conflitos: esses conflitos podem ocorrer quando um aplicativo exclui simultaneamente um item em 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 políticas para resolver conflitos de gravação. Você pode selecionar entre duas políticas de resolução de conflitos em um contêiner do Azure Cosmos DB:

  • Last Write Wins (LWW): Esta política de resolução, por padrão, usa uma propriedade de carimbo de data/hora definida pelo sistema. Baseia-se no protocolo de relógio de sincronização de tempo. Se você usar a API para NoSQL, poderá especificar qualquer outra propriedade numérica personalizada (por exemplo, sua própria noção de carimbo de data/hora) a ser usada para resolução de conflitos. Uma propriedade numérica personalizada também é chamada de caminho de resolução de conflitos.

    Se dois ou mais itens entrarem em conflito nas operações de inserção ou substituição, o item com o valor mais alto para o caminho de resolução de conflitos se tornará o vencedor. O sistema determina o vencedor se vários itens tiverem o mesmo valor numérico para o caminho de resolução de conflitos. Todas as regiões convergirão para um único vencedor e acabarão com a mesma versão do item comprometido. Quando conflitos de exclusão estão envolvidos, a versão excluída sempre vence os conflitos de inserção ou substituição. Esse resultado ocorre independentemente do valor do caminho de resolução de conflitos.

    Nota

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

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

  • Personalizado: esta política de resolução foi projetada para semântica definida pelo aplicativo para reconciliação de conflitos. Ao definir essa política em seu contêiner do Azure Cosmos DB, você também precisa registrar um procedimento armazenado de mesclagem. Este procedimento é invocado automaticamente quando conflitos são detetados em uma transação de banco de dados no servidor. O sistema fornece exatamente uma garantia única para a execução de um procedimento de fusão como parte do protocolo de compromisso.

    Se você configurar seu contêiner com a opção de resolução personalizada e não conseguir registrar um procedimento de mesclagem no contêiner ou se o procedimento de mesclagem lançar uma exceção em tempo de execução, os conflitos serão gravados no feed de conflitos. Em seguida, seu aplicativo precisa resolver manualmente os conflitos no feed de conflitos. Para saber mais, veja exemplos de como usar a política de resolução personalizada e como usar o feed de conflitos.

    Nota

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

Próximos passos

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