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