Кіріспе

Деректер қорына бір мезгілде қол жеткізу мәселесінің шешімі

Жазбаларды құлыптау – деректер қорындағы деректерге бір уақытта қол жеткізуді болдырмау арқылы, нәтижелердің дұрыс еместігіне жол бермеу техникасы. Классикалық мысал – екі банктік қызметкердің екі түрлі операция үшін бір банктік шотты жаңартуға тырысуымен көрсетілген. 1-ші және 2-ші клерктер есептік жазбаны алады (яғни көшіреді). 1-ші клерк транзакцияны қолданып, сақтайды. 2-ші клерк өзінің сақталған көшірмесіне басқа транзакцияны қолданып, түпнұсқалық жазба мен өзінің өзгерістеріне негізделген нәтижені сақтайды, соның салдарынан 1-ші клерк енгізген транзакция жазылып тасталады. Жазба енді алғашқы транзакцияны көрсетпейді, тіпті ол болмағандай. Бұған жол бермеудің қарапайым жолы – кез келген пайдаланушы жазбаны өзгерткен кезде файлды құлыптау, сонда басқа пайдаланушы деректерді сақтай алмайды. Бұл жазбалардың дұрыс емес жазылуына жол бермейді, бірақ бір уақытта тек бір жазбаны өңдеуге мүмкіндік береді, сонымен қатар бір уақытта жазбаларды өңдеуге қажетті басқа пайдаланушыларды құлыптап тастайды. Бірнеше пайдаланушыға деректер қорының кестесін бір уақытта өңдеуге мүмкіндік беру және шексіз қол жеткізуден туындайтын сәйкессіздіктерді болдырмау үшін, жазбаны өңдеу немесе жаңарту үшін алғанда құлыптауға болады. Сол жазбаны өңдеу үшін алуға тырысқан кез келген адамға жазуға рұқсат құлыптау себепті берілмейді (бірақ, жүзеге асырылуына байланысты, олар жазбаны өңдеусіз көре алады). Жазба сақталғаннан кейін немесе түзетулер жойылғаннан кейін құлыптау алынады. Жазбалар басқа өзгерістерді жазып тастау үшін ешқашан сақталмайды, деректердің тұтастығы сақталады. Деректерді басқару теориясында құлыптау бірнеше деректер қоры пайдаланушылары арасында оқшаулануды қамтамасыз ету үшін қолданылады. Бұл ACID аббревиатурасындағы "I" әрпі. Құлыптаудың толық және сенімді сипаттамасын Джим Грей жазған.

Қалқалардың түйіршіктілігі

Егер банк қызметкерлері (жоғарыда көрсетілген мысалға сәйкес) екі клиентке қызмет көрсеткенде, бірақ олардың шоттары бір кітапшада болса, онда бүкіл кітапша немесе бір немесе бірнеше деректер базасының кестелері әрқайсысы бірден бір транзакцияны аяқтау үшін қызметкерлерге өңдеуге қолжетімді болуы керек (файлдарды құлыптау). Қауіпсіз болса да, бұл әдіс қажетсіз күтуді тудырады. Егер қызметкерлер ағымдағы клиенттің шотын (соның ішінде басқа бірнеше шотты) қамтитын бір бетті алып тастаса, онда әр клиенттің шоты басқалардан бөлек бетке орналасса, бірнеше клиентке бір мезгілде қызмет көрсетуге болады. Егер екі клиенттің шоттары бір бетте болса, онда бір уақытта тек біреуіне ғана қызмет көрсетілуі мүмкін. Бұл деректер қорындағы беттік деңгейде құлыптаумен ұқсас. Егер әрбір жеке шотты қызметкер ала алса, бұл жоғары дәрежелі егжей-тегжейлілікке ие болады. Бұл кез келген клиентке басқа шотқа кіретін басқа клиентті күтпей-ақ қызмет көрсетуге мүмкіндік береді. Бұл жазба деңгейінде құлыптаумен ұқсас және әдетте деректерді басқару жүйесіндегі құлыптаудың ең жоғары дәрежелі түйіршіктілігі болып табылады. SQL деректер қорында жазба әдетте "жол" деп аталады. Гранулярлы (бөлшекті) құлыптаулардың енгізілуі тұйықталу деп аталатын жағдайды тудырады. Тұйықталу инкременттік құлыптау (бір объектіні құлыптау, содан кейін бір немесе бірнеше қосымша объектілерді құлыптау) қолданылғанда мүмкін болады. Мысалы, егер екі банк клиенты екі қызметкерден олардың шоттары туралы ақпаратты алуды сұраса, олар басқа шоттарға ақша аудару үшін екі шотты құлыптап қояды. Кейіннен клиенттер ақшаны бір-бірінің шоттарына аудару керектігін айтса, қызметкерлер басқа шоттарды іздеп, бірақ олардың "қолданыста" екенін тауып, қайтаруын күтеді. Екі қызметкер бірін-бірі күтіп тұр, бірақ екіншісі құлыптаудан бас тартып, шотты қайтармайынша, олардың ешқайсысы да транзакциясын аяқтай алмайды. Мұндай проблемалардан аулақ болу үшін әртүрлі техникалар қолданылады.

Ортақ құлыптар

Ортақ құлыптар жеке құлыптардан ерекшеленеді, себебі иеленушілер тізімінде бірнеше жазба болуы мүмкін. Ортақ құлыптар барлық иеленушілерге жазбаның мазмұнын оқуға мүмкіндік береді, барлық иеленушілер құлыпты босатқанға дейін жазба өзгертілмейтінін біле отырып. Егер жазбаны басқа бір ұйым (ексклюзивті немесе ортақ) құлыптаған болса, эксклюзивті құлып алу мүмкін емес. Егер бір ұйым үшін құлыптау сұраныстары кезекте тұрса, ортақ құлып берілгеннен кейін, кезектегі басқа ортақ құлыптар да берілуі мүмкін. Егер кезекте эксклюзивті құлып келесі болып тұрса, ол барлық ортақ құлыптар босатылғанша күтуі керек. Жеке құлыптар сияқты, ортақ құлыптар да мүмкіндігінше аз уақытқа иеленуі керек.