Tipos de conflitos e políticas de resolução ao utilizar várias regiões de escrita

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

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

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

  • Inserir conflitos: estes conflitos podem ocorrer quando uma aplicação insere simultaneamente dois ou mais itens com o mesmo índice exclusivo em duas ou mais regiões. Por exemplo, este conflito pode ocorrer com uma propriedade de ID.

  • Substituir conflitos: estes conflitos podem ocorrer quando uma aplicação atualiza o mesmo item simultaneamente em duas ou mais regiões.

  • Eliminar conflitos: estes conflitos podem ocorrer quando uma aplicação elimina simultaneamente um item numa região e o atualiza noutra 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 escrita. Pode selecionar entre duas políticas de resolução de conflitos num contentor do Azure Cosmos DB:

  • Vitórias da Última Escrita (LWW): esta política de resolução, por predefinição, utiliza uma propriedade de carimbo de data/hora definida pelo sistema. Baseia-se no protocolo do relógio de sincronização de hora. Se utilizar a API para NoSQL, pode especificar qualquer outra propriedade numérica personalizada (por exemplo, a sua própria noção de carimbo de data/hora) a ser utilizada para resolução de conflitos. Uma propriedade numérica personalizada também é referida como o 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 torna-se 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 convergem para um único vencedor e acabarão com a mesma versão do item consolidado. Quando estão envolvidos conflitos de eliminação, a versão eliminada vence sempre os conflitos de inserção ou substituição. Este resultado ocorre independentemente do valor do caminho de resolução de conflitos.

    Nota

    Vitórias da Última Escrita é a política de resolução de conflitos predefinida e utiliza o carimbo _ts de data/hora para as seguintes APIs: SQL, MongoDB, Cassandra, Gremlin e Tabela. A propriedade numérica personalizada está disponível apenas para API para NoSQL.

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

  • Personalizado: esta política de resolução foi concebida para semântica definida pela aplicação para reconciliação de conflitos. Quando define esta política no contentor do Azure Cosmos DB, também tem de registar um procedimento armazenado de intercalação. Este procedimento é invocado automaticamente quando são detetados conflitos numa transação de base de dados no servidor. O sistema fornece exatamente uma garantia para a execução de um procedimento de intercalação como parte do protocolo de alocação.

    Se configurar o contentor com a opção de resolução personalizada e não conseguir registar um procedimento de intercalação no contentor ou o procedimento de intercalação emitir uma exceção no runtime, os conflitos são escritos no feed de conflitos. Em seguida, a sua aplicação tem de resolver manualmente os conflitos no feed de conflitos. Para saber mais, veja exemplos de como utilizar a política de resolução personalizada e como utilizar o feed de conflitos.

    Nota

    A política de resolução de conflitos personalizada só está disponível para a API para contas NoSQL e só pode ser definida no momento da criação. Não é possível definir uma política de resolução personalizada num contentor existente.

Passos seguintes

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