Ի՞նչ մակարդակների մեկուսացում կա տվյալների բազաների մեջ։
sobes.tech AI
Պատասխան AI-ից
SQL ստանդարտում սահմանված են չորս մակարդակներ՝ Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Ամենացածր մակարդակ։ Տրանզակցիան կարող է կարդալ տվյալներ, որոնք դեռ չեն հաստատվել (այսինքն՝ կատարվել է այլ տրանզակցիայով, որը դեռ չի ավարտվել
COMMIT-ով): Սա հանգեցնում է "լեղի" կարդացումների (dirty reads): -
Read Committed: Տրանզակցիան տեսնում է միայն այն տվյալները, որոնք հաստատվել են սկսելուց կամ դրա ընթացքում։ Պահպանում է "լեղի" կարդացումները, բայց թույլ է տալիս անընդհատ կարդացումներ (non-repeatable reads) և ֆանտոմներ (phantom reads):
- Անընդհատ կարդացումներ: Նույն կարդացումը տրանզակցիայի շրջանակներում վերադարձնում է տարբեր տվյալներ, քանի որ մյուս տրանզակցիան փոխել և հաստատել է դրանք:
- Ֆանտոմներ: Երբ
WHEREպայմանով հարցում է կատարվում, երկրորդ տրանզակցիան ավելացնում կամ հեռացնում է պայմանին համապատասխան տողեր, և նույն հարցումը կրկին կատարելու դեպքում վերադառնում է այլ տողեր:
-
Repeatable Read: Տրանզակցիան տեսնում է միայն այն տվյալները, որոնք հաստատվել են սկսելուց առաջ։ Գаранտիա է, որ նույն տողերի կրկնակի կարդացումները տրանզակցիայի շրջանակներում վերադարձնում են նույն տվյալները։ Պահպանում է "լեղի" և անընդհատ կարդացումները։ Թույլ է տալիս ֆանտոմներ:
// Օրինակ Repeatable Read // Տրանզակցիա 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Օրինակ՝ 100 // Տրանզակցիա 2 (համաժամանակ) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Նոր օգտվող', 'active'); // COMMIT; // Տրանզակցիա 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Հետո ևս 100 (ֆանտոմ) // COMMIT; -
Serializable: Ամենաբարձր մակարդակ։ Գаранտիա է, որ միաժամանակյա տրանզակցիաների կատարմանը հավասար կլինի որոշակի հերթական կատարմանը։ Պահպանում է "լեղի" կարդացումները, անընդհատ կարդացումները և ֆանտոմները։ Կարող է նվազեցնել արտադրողականությունը՝ բլոկավորումների պատճառով:
Տարբեր տվյալների բազայի կառավարման համակարգերում կարող են լինել իրենց իրականացման և առանձնահատկությունների տարբերություններ, ինչպես նաև լրացուցիչ մակարդակներ։ Օրինակ, MySQL InnoDB-ը ըստ default- ի ունի Repeatable Read մակարդակը։