Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
APLICA-SE A: NoSQL
O lote transacional descreve um grupo de operações pontuais que precisam ou ter sucesso ou falhar juntas com a mesma chave de partição num recipiente. As operações são definidas, adicionadas ao lote, e o lote é executado. Se todas as operações forem bem-sucedidas na ordem em que estão descritas na operação em lote transacional, a transação será confirmada. No entanto, se alguma operação falhar, toda a transação é revertida.
O que é uma transação no Azure Cosmos DB
Uma transação numa base de dados típica pode ser definida como uma sequência de operações executadas como uma única unidade lógica de trabalho. Cada transação garante as propriedades ACID (Atomicidade, Consistência, Isolamento, Durabilidade).
- Atomicidade garante que todas as operações realizadas dentro de uma transação sejam tratadas como uma única unidade, e que ou todas sejam confirmadas ou nenhuma seja.
- Consistência garante que os dados estejam sempre em um estado válido em todas as transações.
- Isolamento garante que nenhuma transação interfira com outra – muitos sistemas comerciais oferecem vários níveis de isolamento que podem ser usados conforme as necessidades da aplicação.
- Durabilidade garante que qualquer alteração que seja confirmada numa base de dados estará sempre presente. Azure Cosmos DB suporta transações totalmente compatíveis com ACID com isolamento de instantâneo para operações dentro da mesma chave de partição lógica.
Operações em lote transacionais e procedimentos armazenados
Atualmente, o Azure Cosmos DB dá suporte a procedimentos armazenados, que também fornecem o escopo transacional em operações. No entanto, operações em lote transacionais oferecem os seguintes benefícios:
- Opção de idioma – O lote transacional é suportado no SDK e na linguagem com que você já trabalha, enquanto os procedimentos armazenados precisam ser escritos em JavaScript.
- Controle de versão de código – A versão do código da aplicação e a sua entrada no pipeline de CI/CD é muito mais natural do que orquestrar a atualização de um procedimento armazenado e garantir que a transição ocorra no momento certo. Também facilita a reversão de alterações.
- Desempenho – Reduziu a latência em operações equivalentes em até 30% em comparação com a execução do procedimento armazenado.
- Serialização de conteúdo – Cada operação dentro de um lote transacional pode usar opções de serialização personalizadas para a sua carga útil.
Como criar uma operação em lote transacional
Ao criar uma operação em lote transacional, comece com uma instância de contêiner e chame CreateTransactionalBatch:
PartitionKey partitionKey = new PartitionKey("road-bikes");
TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);
Em seguida, adicione várias operações ao lote:
Product bike = new (
id: "68719520766",
category: "road-bikes",
name: "Chropen Road Bike"
);
batch.CreateItem<Product>(bike);
Part part = new (
id: "68719519885",
category: "road-bikes",
name: "Tronosuros Tire",
productId: bike.id
);
batch.CreateItem<Part>(part);
Finalmente, chame ExecuteAsync no lote:
using TransactionalBatchResponse response = await batch.ExecuteAsync();
Assim que a resposta for recebida, verifique se a resposta é bem-sucedida. Se a resposta indicar um sucesso, extraia os resultados.
if (response.IsSuccessStatusCode)
{
TransactionalBatchOperationResult<Product> productResponse;
productResponse = response.GetOperationResultAtIndex<Product>(0);
Product productResult = productResponse.Resource;
TransactionalBatchOperationResult<Part> partResponse;
partResponse = response.GetOperationResultAtIndex<Part>(1);
Part partResult = partResponse.Resource;
}
Importante
Se houver uma falha, a operação com falha terá um código de status de seu erro correspondente. Todas as outras operações terão um código de status 424 (dependência falhada). Se a operação falhar porque tenta criar um item que já existe, será retornado um código de estado 409 (conflito). O código de estado permite identificar a causa da falha da transação.
Como são executadas as operações transacionais em lote
Quando o Lote Transacional é executado, todas as operações no Lote Transacional são agrupadas, serializadas em uma única carga útil e enviadas como uma única solicitação para o serviço Azure Cosmos DB.
O serviço recebe o pedido e executa todas as operações dentro de um âmbito transacional, e devolve uma resposta usando o mesmo protocolo de serialização. Esta resposta é bem-sucedida ou fracassada e fornece respostas individuais de operação por operação.
O SDK expõe a resposta para você verificar o resultado e, opcionalmente, extrair cada um dos resultados das operações internas.
Limitações
Atualmente, existem dois limites conhecidos
- O limite de tamanho da solicitação do Azure Cosmos DB restringe o tamanho da carga útil do Lote Transacional para não exceder 2 MB e o tempo máximo de execução é de 5 segundos.
- Existe um limite atual de 100 operações por Lote Transacional para garantir que o desempenho esteja conforme o esperado e dentro dos SLAs.