Ի՞նչ անոմալիաներ կարող են առաջանալ պառլելային գործարքների իրականացման ժամանակ։
sobes.tech AI
Պատասխան AI-ից
Երբ կատարվում են միաժամանակյա գործառնություններ, կարող են առաջանալ հետևյալ անոմալիաները:
-
Կորած թարմացումներ (Lost Update): Մի գործառնություն վերագրում է մյուս գործառնության փոփոխությունները նախքան դրանք հաստատելը:
Ժամանակ Գործառնություն 1 Գործառնություն 2 t1 Կարդում է բալանսի արժեքը (օրինակ, 100) t2 Կարդում է բալանսի արժեքը (օրինակ, 100) t3 Բարձրացնում է բալանսը 10-ով (Բալանս = 110) t4 Բարձրացնում է բալանսը 20-ով (Բալանս = 120) t5 Հաստատում է փոփոխությունները (Բալանսը դառնում 110) t6 Հաստատում է փոփոխությունները (Բալանսը դառնում 120) Արդյունք: Չնայած երկու բարձրացումներին, վերջնական բալանսը 120 է, ոչ թե 130: Բարձրացումը գործառնությունից 1 կորցված է:
-
Անմաքուր ընթերցում (Dirty Read): Մի գործառնություն կարդում է հաստատված չլինած փոփոխությունները մյուս գործառնությունից:
Ժամանակ Գործառնություն 1 Գործառնություն 2 t1 Սկսում է փոփոխել բալանսը (100 -> 110) t2 Կարդում է բալանսը (մատնանշում 110) t3 Վերացնում է փոփոխությունը (Բալանսը վերադառնում է 100) t4 Օգտագործում է բալանսը 110 հաշվարկներում, չնայած իրական արժեքը 100 է Արդյունք: Գործառնությունը 2 հիմնվում է տվյալների վրա, որոնք վերջում չեն հաստատվել:
-
Անհատական ընթերցում (Non-Repeatable Read): Մի գործառնությունում նույն տողը կրկնակի ընթերցելիս ստանում է տարբեր արժեքներ, քանի որ մյուս գործառնությունը փոփոխել է այդ տողը միջանկյալ ժամանակ:
Ժամանակ Գործառնություն 1 Գործառնություն 2 t1 Կարդում է բալանսը (մատնանշում 100) t2 Փոխում է բալանսը 110-ով և հաստատում է t3 Վերադառնում է կրկնակի կարդալ բալանսը (մատնանշում 110, ոչ թե 100) Արդյունք: Բալանսը փոխվել է նույն գործառնության ընթացքում, ինչը կարող է հանգեցնել սխալ արդյունքների:
-
Ֆանտոմային ընթերցում (Phantom Read): Խոսքը նման է անհատական ընթերցման, բայց վերաբերում է ոչ թե գոյություն ունեցող տողերի փոփոխությանը, այլ ավելացման կամ հեռացման, որոնք ազդում են հարցման արդյունքների վրա:
Ժամանակ Գործառնություն 1 Գործառնություն 2 t1 Կատարում է SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(մատնանշում 5)t2 Ավելացնում է նոր պատվեր կարգավիճակով 'Pending' և հաստատում t3 Վերականգնում է SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(մատնանշում 6)Արդյունք: Վերականգնումից հետո հարցման ժամանակ հայտնվում են "ֆանտոմային" տողեր, որոնք առաջին ընթերցման ժամանակ չկային:
Այս անոմալիաները կանխվում են օգտագործելով տարբեր մեկուսացման մակարդակներ։