Junior — Middle
Ce niveluri de izolare a tranzacțiilor ați configurat manual în practică?
sobes.tech AI
Răspuns de la AI
În practică, cu bazele de date în Go, este adesea necesar să setați manual nivelurile de izolare ale tranzacțiilor pentru a controla paralelismul și a preveni problemele de acces concurent. Nivelurile principale de izolare pe care le-am folosit:
- Read Uncommitted — cel mai scăzut nivel, permite citirea modificărilor neconfirmate, ceea ce poate duce la citiri "murdare".
- Read Committed — împiedică citirea datelor neconfirmate, dar permite citiri nerepetabile.
- Repeatable Read — garantează că datele citite într-o tranzacție nu se vor schimba până la finalizarea acesteia.
- Serializable — cel mai strict nivel, asigură o izolare completă a tranzacțiilor, ca și cum ar fi executate secvențial.
În Go, folosind pachetul database/sql, nivelul de izolare poate fi setat prin metoda BeginTx cu parametrul sql.TxOptions{Isolation: sql.LevelSerializable} și altele. De exemplu:
ctx := context.Background()
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelRepeatableRead})
if err != nil {
// tratarea erorii
}
// lucru cu tranzacția