Junior — Middle
Que níveis de isolamento de transações você configurou manualmente na prática?
sobes.tech IA
Resposta da IA
Na prática com bases de dados em Go, muitas vezes é necessário definir manualmente os níveis de isolamento das transações para controlar o paralelismo e evitar problemas de acesso concorrente. Os principais níveis de isolamento que utilizei:
- Read Uncommitted — o nível mais baixo, permite ler alterações não confirmadas, o que pode levar a leituras sujas.
- Read Committed — impede a leitura de dados não confirmados, mas permite leituras não repetíveis.
- Repeatable Read — garante que os dados lidos numa transação não irão mudar até ao seu término.
- Serializable — o nível mais rigoroso, fornece isolamento completo das transações, como se fossem executadas sequencialmente.
Em Go, usando o pacote database/sql, o nível de isolamento pode ser definido através do método BeginTx com o parâmetro sql.TxOptions{Isolation: sql.LevelSerializable} e outros. Por exemplo:
ctx := context.Background()
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelRepeatableRead})
if err != nil {
// tratamento do erro
}
// trabalho com a transação