Sobes.tech
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 {
    // хата белән эш итү
}
// транзакция белән эшләү