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 {
    // შეცდომის დამუშავება
}
// მუშაობა ტრანზაქციასთან