16.1. Optimistic Offline Lock
Detecta conflito ao gravar comparando a versão.
Resumo
- Previne conflitos entre transações de negócio detectando o conflito e fazendo rollback na gravação.
- Cada registro tem número de versão.
UPDATE ... SET versao = v+1 WHERE id = ? AND versao = v. - 0 linhas afetadas = alguém mudou antes: lança exceção de concorrência.
- Grava também quem/quando modificou para mensagens melhores. Cuidado com leituras inconsistentes.
- Use quando conflitos são raros. Simples e escalável; o perdedor refaz o trabalho.
Perguntas-chave
responda de cabeça, depois abraComo o conflito é detectado?
O UPDATE inclui a versão lida na cláusula WHERE; se nenhuma linha for afetada, houve conflito.
Quando usar otimista em vez de pessimista?
Quando a chance de conflito é baixa e perder trabalho ocasionalmente é aceitável.
Qual o problema de leitura inconsistente?
Dados só lidos (não gravados) também podem mudar; é preciso checar suas versões se forem relevantes.
Exercícios de fixação
0/5 respondidas1.
UPDATE cliente SET nome=?, versao=6 WHERE id=10 AND versao=5 afetou 0 linhas. O que significa?2.
Quando o Optimistic Offline Lock é a melhor escolha?
3.
Qual a desvantagem principal do controle otimista?
4.
Além da versão, que dados Fowler sugere gravar para melhorar a mensagem de conflito?
5.
Uma regra calcula o imposto usando o endereço do cliente, que só é lido. Outro usuário altera o endereço. Qual problema e solução?