Junior — Middle
Кадом сатҳҳои изоляти транзаксияро дар амал дастӣ муқаррар кардед?
sobes.tech AI
Ҷавоб аз AI
Практикада, Go-да мәгълүмат базалары белән эшләгәндә, транзакцияләрнең изоляция дәрәҗәләрен кул белән көйләү еш кына кирәк, бу параллелизмны контрольдә тоту һәм конкуренцияле керү проблемаларын булдырмау өчен. Мин кулланган төп изоляция дәрәҗәләре:
- Read Uncommitted — иң түбән дәрәҗә, расланмаган үзгәрешләрне укуга рөхсәт итә, бу "пычрак" укуларга китерергә мөмкин.
- Read Committed — расланмаган мәгълүматларны укудан саклый, ләкин кабатланмаучы укуларга рөхсәт итә.
- Repeatable Read — транзакциядә укылган мәгълүматлар аның тәмамлануга кадәр үзгәрмәсен гарантияли.
- Serializable — иң каты дәрәҗә, транзакцияләрнең тулысынча изоляциясен тәэмин итә, аларны тәртипле итеп башкарган кебек.
Goда, database/sql пакетын кулланып, изоляция дәрәҗәсен BeginTx методы аша sql.TxOptions{Isolation: sql.LevelSerializable} параметры белән көйләү мөмкин. Мәсәлән:
ctx := context.Background()
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelRepeatableRead})
if err != nil {
// хата белән эш итү
}
// транзакция белән эшләү