Junior — Middle
Quais métodos de bancos de dados garantem proteção contra condições de corrida?
sobes.tech IA
Resposta da IA
Para proteger contra condições de corrida em bases de dados, utilizam-se os seguintes métodos:
- Transações e bloqueios: as bases de dados aplicam bloqueios ao nível de linha, página ou tabela para evitar alterações simultâneas dos mesmos dados.
- Isolamento de transações: os níveis de isolamento (Read Uncommitted, Read Committed, Repeatable Read, Serializable) regulam a visibilidade das alterações entre transações, reduzindo a probabilidade de conflitos.
- Bloqueio otimista: ao atualizar dados, verifica-se se estes mudaram desde a leitura (por exemplo, usando uma versão ou marca temporal). Se mudaram, a operação é revertida.
- Bloqueio pessimista: os dados são bloqueados imediatamente na leitura para evitar alterações por outras transações.
Exemplo de bloqueio otimista usando a versão do registo:
// Suponha que exista um campo Version na tabela
var entity = dbContext.Entities.Find(id);
var currentVersion = entity.Version;
// Alterar dados
entity.Name = "Novo Nome";
// Ao guardar, verificar se a versão não mudou
try {
dbContext.SaveChanges();
} catch (DbUpdateConcurrencyException) {
// Tratamento do conflito — os dados foram alterados por outro processo
}