Mis on samaaegsuse kontroll?

Andmehalduse programmeerimises on samaaegsuse kontroll mehhanism, mis on loodud tagama, et samaaegsete toimingute abil saadakse täpsed tulemused. Need tulemused tuleb samuti õigeaegselt saavutada. Samaaegsuse kontrolli on väga sageli näha andmebaasides, kus on kasutajate jaoks otsitava teabe vahemälu.

Programmeerijad püüavad kujundada andmebaasi selliselt, et oluliste tehingute mõju jagatud andmetele oleks järjestikku samaväärne. See tähendab, et andmed, mis puutuvad kokku tehingukogumitega, oleksid teatud olekus, kus tulemused on saadavad, kui kõik tehingud täidetakse järjestikku ja kindlas järjekorras. Mõnikord on need andmed kehtetud, kuna neid on muudetud samaaegselt kahe tehinguga.

Tehingute üksteise järel elluviimise tagamiseks on mitu võimalust, sealhulgas vastastikuse välistamise kasutamine ja ressursi loomine, mis otsustab, millistele tehingutele on juurdepääs. See on aga liialdatud ega võimalda programmeerijal saada kasu samaaegsuse juhtimisest hajutatud süsteemis. Samaaegsuse kontroll võimaldab teostada samaaegselt mitut tehingut, hoides need tehingud üksteisest eemal, tagades lineariseeritavuse. Üks võimalus samaaegsuse kontrolli rakendamiseks on konkreetse ressursi eksklusiivse luku kasutamine jadatehingute jadatehingute jaoks, mis jagavad ressursse. Tehingud lukustavad kasutamiseks mõeldud objekti ja kui mõni muu tehing teeb päringu lukustatud objekti kohta, peab see tehing ootama, kuni objekt avatakse.

Selle meetodi rakendamine hajutatud süsteemides hõlmab lukuhaldureid – servereid, mis väljastavad ressursside lukke. See on väga sarnane tsentraliseeritud vastastikuse välistamise serveritega, kus kliendid võivad taotleda lukke ja saata sõnumeid teatud ressursi lukustuse vabastamiseks. Sarjakäituse säilitamine on aga samaaegsuse kontrollimiseks endiselt vajalik. Kui kaks erinevat tehingut pääsevad juurde sarnasele objektikomplektile, peavad tulemused olema sarnased ja need tehingud oleksid justkui sooritatud kindlas järjekorras. Ressursile juurdepääsu korra tagamiseks võetakse kasutusele kahefaasiline lukustus, mis tähendab, et eraldi luku vabastamisel ei lubata tehingutele uusi lukke.

Samaaegsuse kontrolli kahefaasilise lukustuse puhul loetakse selle algfaasiks kasvufaasiks, kus tehing omandab vajaliku lukustuse. Järgmist etappi peetakse kahanemise faasiks, mille käigus tehingu lukud vabastatakse. Seda tüüpi lukustusega on probleeme. Kui tehingud katkestatakse, võivad teised tehingud kasutada katkestatud tehingute poolt muudetud ja lukust vabastatud objektide andmeid. See tooks kaasa teiste tehingute katkestamise.