5. Concorrência
Atualização perdida e leitura inconsistente. Transação de sistema ≠ transação de negócio.
Resumo
- Problemas: atualização perdida e leitura inconsistente. Conflito entre corretude e vivacidade (liveness).
- Controle otimista detecta conflito ao gravar; pessimista bloqueia antes. Pessimista arrisca deadlock.
- Transação ACID. Níveis de isolamento: serializable, repeatable read, read committed, read uncommitted.
- Transação de negócio atravessa várias requisições; transação de sistema do banco não deve ficar aberta tanto.
- Por isso existem padrões de concorrência offline. No servidor, prefira um processo/thread por requisição.
Perguntas-chave
responda de cabeça, depois abraQual a diferença entre controle otimista e pessimista?
Otimista deixa todos editarem e detecta o conflito na gravação. Pessimista impede o conflito bloqueando o dado antes da edição.
O que é transação de negócio?
Uma unidade de trabalho do ponto de vista do usuário, que pode durar várias requisições (ex.: editar e confirmar um pedido).
Quais anomalias cada nível de isolamento permite?
Repeatable read: fantasmas. Read committed: leituras não repetíveis. Read uncommitted: leituras sujas. Serializable: nenhuma.
Exercícios de fixação
0/5 respondidas1.
Ana e Bruno abrem o mesmo cliente. Ana muda o telefone e grava. Bruno muda o e-mail e grava, sobrescrevendo o registro inteiro. O telefone de Ana se perdeu. Que problema é esse?
2.
Por que não manter uma transação do banco aberta enquanto o usuário edita uma tela por 10 minutos?
3.
Qual nível de isolamento permite leitura de dados ainda não confirmados (dirty read)?
4.
Qual a principal desvantagem do controle pessimista?
5.
Que modelo de execução no servidor Fowler considera mais simples e seguro para a maioria dos sistemas?