Junior — Middle
Kuidas määrata süsteemis tehingute vastastikuse toimimise režiim, et tagada nende korrektne toimimine?
sobes.tech AI
Vastus AI-lt
Süsteemi transaktsioonide vaheline suhtlusseisund määratakse transaktsioonide isolatsioonitaseme järgi, mis määrab, kuidas ja millal muutused, mida üks transaktsioon on teinud, muutuvad teiste jaoks nähtavaks. Õige transaktsioonide toimimise tagamiseks on oluline valida sobiv isolatsioonitase, arvestades andmete terviklikkuse ja jõudluse tasakaalu.
Go-s, töötades andmebaasidega database/sql paketiga, saab isolatsioonitaset määrata transaktsiooni alguses:
import (
"context"
"database/sql"
)
func startTransaction(db *sql.DB) (*sql.Tx, error) {
ctx := context.Background()
tx, err := db.BeginTx(ctx, &sql.TxOptions{
Isolation: sql.LevelSerializable, // kõige rangem isolatsioonitase
})
return tx, err
}
Peamised isolatsioonitasemed:
- Read Uncommitted — võimaldab näha mitte-kinnitatud muudatusi (musta lugemine).
- Read Committed — nähtavad on ainult kinnitatud muudatused.
- Repeatable Read — tagab, et loetud andmed transaktsiooni jooksul ei muutu kuni selle lõpuni.
- Serializable — kõige rangem, transaktsioonid toimuvad nagu järjestikused.
Valik sõltub andmete terviklikkuse ja jõudluse nõuetest. Õige transaktsioonide toimimise tagamiseks on vajalik määratleda ja selgelt seadistada sobiv isolatsioonitase.