trilha

Tecnologias/02 - Bancos de Dados/03 - NewSQL2 min

Transações e Isolamento em NewSQL

Definição

Uma transação distribuída pode alterar dados em mais de uma parte do banco preservando uma decisão comum de confirmar ou abortar. Atomicidade trata dessa unidade de resultado. Isolamento define quais efeitos de operações concorrentes podem ser observados.

No CockroachDB, escritas provisórias, registros de transação e MVCC participam dessa coordenação. O protocolo inclui otimizações próprias; descrever todo NewSQL como “um único algoritmo de commit” esconderia diferenças importantes. Referência: Transaction Layer.

Exemplo

Uma transferência debita 30 da conta A e credita 30 na conta B. Se elas estão em partes diferentes, o banco precisa decidir o resultado comum. A aplicação não deve enxergar apenas o débito como uma transação concluída com sucesso.

Serializável significa que o efeito das transações concorrentes equivale a alguma execução sequencial. Consistência externa acrescenta uma ordem compatível com a observação temporal descrita pelo sistema; o Spanner oferece essa garantia em seu modo serializável. O rótulo NewSQL, sozinho, não define o nível de isolamento. Referência: Spanner e consistência externa.

Repetição de transação

Um conflito pode provocar erro que exige repetir a transação. Repetir apenas a última instrução pode reutilizar decisões baseadas em leituras que já não são válidas.

iniciar tentativa
  ler os dados
  aplicar as regras
  escrever as alterações
  tentar confirmar
se o erro exigir retry:
  repetir a transação com limite e espera apropriados

Enviar uma cobrança externa dentro desse bloco pode duplicá-la na repetição. Efeitos externos exigem mecanismos próprios, como idempotência e outbox. Referência: erros de retry.

Aprofundamento aplicado

Resultado incerto não é erro de serialização

Um conflito conhecido pode exigir repetir a transação inteira. Uma conexão perdida durante confirmação pode deixar o resultado desconhecido. O primeiro caso permite recalcular após abortar; o segundo exige descobrir se o efeito já aconteceu antes de criar uma nova operação lógica.

operação de negócio: transferencia-42
  tentativa 1: débito + crédito + registro da operação
  resposta perdida
  retry: procura transferencia-42
  se confirmada: devolve o resultado existente

O registro de operação deve participar da atomicidade necessária e ter unicidade. Esse desenho é uma estratégia da aplicação; detalhes de erros e retries dependem do produto e do driver. Referência: retries no CockroachDB.

Exercício: separe três situações: saldo insuficiente, conflito serializável e timeout no commit. Resultado esperado: rejeitar a primeira, repetir corretamente a segunda e reconciliar a terceira, com limites de tentativas e prazo total.

Relacionado: Idempotent Operations · 3. MVCC e Isolamento na Prática.


Parte de NewSQL

Buscar

Busca por título, seção e texto das notas