Sobes.tech
Junior — Middle

Təcrübədə əl ilə hansı tranzaksiya izolasiya səviyyələrini təyin etdiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Go ilə verilənlər bazaları ilə praktikada, çox vaxt paralelliyi idarə etmək və rəqabətə əsaslanan giriş problemlərini qarşısını almaq üçün tranzaksiyaların izolasiya səviyyələrini əl ilə təyin etmək lazımdır. Mən istifadə etdiyim əsas izolasiya səviyyələri:

  • Read Uncommitted — ən aşağı səviyyə, təsdiqlənməmiş dəyişiklikləri oxumağa imkan verir, bu da "çirkli" oxumalara səbəb ola bilər.
  • Read Committed — təsdiqlənməmiş məlumatların oxunmasını qarşısını alır, lakin təkrarlana bilən oxumalara imkan verir.
  • Repeatable Read — tranzaksiya daxilində oxunan məlumatların onun tamamlanmasına qədər dəyişməyəcəyini təmin edir.
  • Serializable — ən sərt səviyyə, tranzaksiyaların tam izolasyonunu təmin edir, sanki onlar ardıcıl icra olunurlar.

Go-da, database/sql paketindən istifadə edərək, izolasiya səviyyəsini BeginTx metodu ilə sql.TxOptions{Isolation: sql.LevelSerializable} kimi parametr ilə təyin etmək mümkündür. Məsələn:

ctx := context.Background()
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelRepeatableRead})
if err != nil {
    // xəta ilə işləmə
}
// tranzaksiya ilə işləmək