Compreender as políticas de resolução de conflitos
Pronto para uso, o recurso de gravação em várias regiões do Azure Cosmos DB tem o gerenciamento automático de conflitos integrado. Os conflitos podem ocorrer quando os clientes atualizam simultaneamente o mesmo item em várias regiões. Existem três tipos de conflitos:
Tipo | Descrição |
---|---|
Inserir | Esse conflito ocorre quando mais de um item é inserido simultaneamente com o mesmo identificador exclusivo em várias regiões |
Replace | Os conflitos de substituição ocorrem quando vários aplicativos cliente atualizam o mesmo item simultaneamente em regiões separadas |
Eliminar | Conflitos de exclusão ocorrem quando um cliente está tentando atualizar um item que foi excluído em outra região ao mesmo tempo |
A política de resolução de conflitos padrão no Azure Cosmos DB é Last Write Wins. Esta política usa o carimbo de data/hora (_ts) para determinar qual item foi escrito por último. Em termos simples, se vários itens estiverem em conflito, o item com o maior valor para a propriedade _ts vencerá. No caso de um conflito de exclusão, a operação para excluir um item sempre vencerá outras operações.
Embora a propriedade _ts seja o padrão para a política Last Write Wins, você pode configurar qualquer propriedade numérica para essa política configurando um caminho de resolução de conflitos. Você pode usar o SDK do .NET para Azure Cosmos DB para NoSQL para configurar o caminho de resolução de conflitos personalizado.
Neste exemplo, um novo contêiner chamado products é criado com um caminho de resolução de conflitos personalizado de /sortableTimestamp.
Database database = client.GetDatabase("cosmicworks");
ContainerProperties properties = new("products", "/categoryId")
{
ConflictResolutionPolicy = new ConflictResolutionPolicy()
{
Mode = ConflictResolutionMode.LastWriterWins,
ResolutionPath = "/sortableTimestamp",
}
};
Container container = database.CreateContainerIfNotExistsAsync(properties);
Nota
Você só pode definir uma política de resolução de conflitos em contêineres recém-criados.