Sobes.tech
Middle+

Ի՞նչ անոմալիաներ կարող են առաջանալ պառլելային գործարքների իրականացման ժամանակ։

sobes.tech AI

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

Երբ կատարվում են միաժամանակյա գործառնություններ, կարող են առաջանալ հետևյալ անոմալիաները:

  1. Կորած թարմացումներ (Lost Update): Մի գործառնություն վերագրում է մյուս գործառնության փոփոխությունները նախքան դրանք հաստատելը:

    Ժամանակ Գործառնություն 1 Գործառնություն 2
    t1 Կարդում է բալանսի արժեքը (օրինակ, 100)
    t2 Կարդում է բալանսի արժեքը (օրինակ, 100)
    t3 Բարձրացնում է բալանսը 10-ով (Բալանս = 110)
    t4 Բարձրացնում է բալանսը 20-ով (Բալանս = 120)
    t5 Հաստատում է փոփոխությունները (Բալանսը դառնում 110)
    t6 Հաստատում է փոփոխությունները (Բալանսը դառնում 120)

    Արդյունք: Չնայած երկու բարձրացումներին, վերջնական բալանսը 120 է, ոչ թե 130: Բարձրացումը գործառնությունից 1 կորցված է:

  2. Անմաքուր ընթերցում (Dirty Read): Մի գործառնություն կարդում է հաստատված չլինած փոփոխությունները մյուս գործառնությունից:

    Ժամանակ Գործառնություն 1 Գործառնություն 2
    t1 Սկսում է փոփոխել բալանսը (100 -> 110)
    t2 Կարդում է բալանսը (մատնանշում 110)
    t3 Վերացնում է փոփոխությունը (Բալանսը վերադառնում է 100)
    t4 Օգտագործում է բալանսը 110 հաշվարկներում, չնայած իրական արժեքը 100 է

    Արդյունք: Գործառնությունը 2 հիմնվում է տվյալների վրա, որոնք վերջում չեն հաստատվել:

  3. Անհատական ընթերցում (Non-Repeatable Read): Մի գործառնությունում նույն տողը կրկնակի ընթերցելիս ստանում է տարբեր արժեքներ, քանի որ մյուս գործառնությունը փոփոխել է այդ տողը միջանկյալ ժամանակ:

    Ժամանակ Գործառնություն 1 Գործառնություն 2
    t1 Կարդում է բալանսը (մատնանշում 100)
    t2 Փոխում է բալանսը 110-ով և հաստատում է
    t3 Վերադառնում է կրկնակի կարդալ բալանսը (մատնանշում 110, ոչ թե 100)

    Արդյունք: Բալանսը փոխվել է նույն գործառնության ընթացքում, ինչը կարող է հանգեցնել սխալ արդյունքների:

  4. Ֆանտոմային ընթերցում (Phantom Read): Խոսքը նման է անհատական ընթերցման, բայց վերաբերում է ոչ թե գոյություն ունեցող տողերի փոփոխությանը, այլ ավելացման կամ հեռացման, որոնք ազդում են հարցման արդյունքների վրա:

    Ժամանակ Գործառնություն 1 Գործառնություն 2
    t1 Կատարում է SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (մատնանշում 5)
    t2 Ավելացնում է նոր պատվեր կարգավիճակով 'Pending' և հաստատում
    t3 Վերականգնում է SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (մատնանշում 6)

    Արդյունք: Վերականգնումից հետո հարցման ժամանակ հայտնվում են "ֆանտոմային" տողեր, որոնք առաջին ընթերցման ժամանակ չկային:

Այս անոմալիաները կանխվում են օգտագործելով տարբեր մեկուսացման մակարդակներ։