Sobes.tech
Middle

Ի՞նչ մակարդակների մեկուսացում կա տվյալների բազաների մեջ։

sobes.tech AI

Պատասխան AI-ից

SQL ստանդարտում սահմանված են չորս մակարդակներ՝ Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  1. Read Uncommitted: Ամենացածր մակարդակ։ Տրանզակցիան կարող է կարդալ տվյալներ, որոնք դեռ չեն հաստատվել (այսինքն՝ կատարվել է այլ տրանզակցիայով, որը դեռ չի ավարտվել COMMIT-ով): Սա հանգեցնում է "լեղի" կարդացումների (dirty reads):

  2. Read Committed: Տրանզակցիան տեսնում է միայն այն տվյալները, որոնք հաստատվել են սկսելուց կամ դրա ընթացքում։ Պահպանում է "լեղի" կարդացումները, բայց թույլ է տալիս անընդհատ կարդացումներ (non-repeatable reads) և ֆանտոմներ (phantom reads):

    • Անընդհատ կարդացումներ: Նույն կարդացումը տրանզակցիայի շրջանակներում վերադարձնում է տարբեր տվյալներ, քանի որ մյուս տրանզակցիան փոխել և հաստատել է դրանք:
    • Ֆանտոմներ: Երբ WHERE պայմանով հարցում է կատարվում, երկրորդ տրանզակցիան ավելացնում կամ հեռացնում է պայմանին համապատասխան տողեր, և նույն հարցումը կրկին կատարելու դեպքում վերադառնում է այլ տողեր:
  3. 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;
    
  4. Serializable: Ամենաբարձր մակարդակ։ Գаранտիա է, որ միաժամանակյա տրանզակցիաների կատարմանը հավասար կլինի որոշակի հերթական կատարմանը։ Պահպանում է "լեղի" կարդացումները, անընդհատ կարդացումները և ֆանտոմները։ Կարող է նվազեցնել արտադրողականությունը՝ բլոկավորումների պատճառով:

Տարբեր տվյալների բազայի կառավարման համակարգերում կարող են լինել իրենց իրականացման և առանձնահատկությունների տարբերություններ, ինչպես նաև լրացուցիչ մակարդակներ։ Օրինակ, MySQL InnoDB-ը ըստ default- ի ունի Repeatable Read մակարդակը։