Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Деректер қорына бір мезгілде қол жеткізу мәселесінің шешімі
Solution for concurrent database access
Жазбаларды құлыптау – деректер қорындағы деректерге бір уақытта қол жеткізуді болдырмау арқылы, нәтижелердің дұрыс еместігіне жол бермеу техникасы. Классикалық мысал – екі банктік қызметкердің екі түрлі операция үшін бір банктік шотты жаңартуға тырысуымен көрсетілген. 1-ші және 2-ші клерктер есептік жазбаны алады (яғни көшіреді). 1-ші клерк транзакцияны қолданып, сақтайды. 2-ші клерк өзінің сақталған көшірмесіне басқа транзакцияны қолданып, түпнұсқалық жазба мен өзінің өзгерістеріне негізделген нәтижені сақтайды, соның салдарынан 1-ші клерк енгізген транзакция жазылып тасталады. Жазба енді алғашқы транзакцияны көрсетпейді, тіпті ол болмағандай. Бұған жол бермеудің қарапайым жолы – кез келген пайдаланушы жазбаны өзгерткен кезде файлды құлыптау, сонда басқа пайдаланушы деректерді сақтай алмайды. Бұл жазбалардың дұрыс емес жазылуына жол бермейді, бірақ бір уақытта тек бір жазбаны өңдеуге мүмкіндік береді, сонымен қатар бір уақытта жазбаларды өңдеуге қажетті басқа пайдаланушыларды құлыптап тастайды. Бірнеше пайдаланушыға деректер қорының кестесін бір уақытта өңдеуге мүмкіндік беру және шексіз қол жеткізуден туындайтын сәйкессіздіктерді болдырмау үшін, жазбаны өңдеу немесе жаңарту үшін алғанда құлыптауға болады. Сол жазбаны өңдеу үшін алуға тырысқан кез келген адамға жазуға рұқсат құлыптау себепті берілмейді (бірақ, жүзеге асырылуына байланысты, олар жазбаны өңдеусіз көре алады). Жазба сақталғаннан кейін немесе түзетулер жойылғаннан кейін құлыптау алынады. Жазбалар басқа өзгерістерді жазып тастау үшін ешқашан сақталмайды, деректердің тұтастығы сақталады. Деректерді басқару теориясында құлыптау бірнеше деректер қоры пайдаланушылары арасында оқшаулануды қамтамасыз ету үшін қолданылады. Бұл ACID аббревиатурасындағы "I" әрпі. Құлыптаудың толық және сенімді сипаттамасын Джим Грей жазған.
Record locking is the technique of preventing simultaneous access to data in a database, to prevent inconsistent results. The classic example is demonstrated by two bank clerks attempting to update the same bank account for two different transactions. Clerks 1 and 2 both retrieve (i. e., copy) the account's record. Clerk 1 applies and saves a transaction. Clerk 2 applies a different transaction to his saved copy, and saves the result, based on the original record and his changes, overwriting the transaction entered by clerk 1. The record no longer reflects the first transaction, as if it had never taken place. A simple way to prevent this is to lock the file whenever a record is being modified by any user, so that no other user can save data. This prevents records from being overwritten incorrectly, but allows only one record to be processed at a time, locking out other users who need to edit records at the same time. To allow several users to edit a database table at the same time and also prevent inconsistencies created by unrestricted access, a single record can be locked when retrieved for editing or updating. Anyone attempting to retrieve the same record for editing is denied write access because of the lock (although, depending on the implementation, they may be able to view the record without editing it). Once the record is saved or edits are canceled, the lock is released. Records can never be saved so as to overwrite other changes, preserving data integrity. In database management theory, locking is used to implement isolation among multiple database users. This is the "I" in the acronym ACID. A thorough and authoritative description of locking was written by Jim Gray.
Қалқалардың түйіршіктілігі
Егер банк қызметкерлері (жоғарыда көрсетілген мысалға сәйкес) екі клиентке қызмет көрсеткенде, бірақ олардың шоттары бір кітапшада болса, онда бүкіл кітапша немесе бір немесе бірнеше деректер базасының кестелері әрқайсысы бірден бір транзакцияны аяқтау үшін қызметкерлерге өңдеуге қолжетімді болуы керек (файлдарды құлыптау). Қауіпсіз болса да, бұл әдіс қажетсіз күтуді тудырады. Егер қызметкерлер ағымдағы клиенттің шотын (соның ішінде басқа бірнеше шотты) қамтитын бір бетті алып тастаса, онда әр клиенттің шоты басқалардан бөлек бетке орналасса, бірнеше клиентке бір мезгілде қызмет көрсетуге болады. Егер екі клиенттің шоттары бір бетте болса, онда бір уақытта тек біреуіне ғана қызмет көрсетілуі мүмкін. Бұл деректер қорындағы беттік деңгейде құлыптаумен ұқсас. Егер әрбір жеке шотты қызметкер ала алса, бұл жоғары дәрежелі егжей-тегжейлілікке ие болады. Бұл кез келген клиентке басқа шотқа кіретін басқа клиентті күтпей-ақ қызмет көрсетуге мүмкіндік береді. Бұл жазба деңгейінде құлыптаумен ұқсас және әдетте деректерді басқару жүйесіндегі құлыптаудың ең жоғары дәрежелі түйіршіктілігі болып табылады. SQL деректер қорында жазба әдетте "жол" деп аталады. Гранулярлы (бөлшекті) құлыптаулардың енгізілуі тұйықталу деп аталатын жағдайды тудырады. Тұйықталу инкременттік құлыптау (бір объектіні құлыптау, содан кейін бір немесе бірнеше қосымша объектілерді құлыптау) қолданылғанда мүмкін болады. Мысалы, егер екі банк клиенты екі қызметкерден олардың шоттары туралы ақпаратты алуды сұраса, олар басқа шоттарға ақша аудару үшін екі шотты құлыптап қояды. Кейіннен клиенттер ақшаны бір-бірінің шоттарына аудару керектігін айтса, қызметкерлер басқа шоттарды іздеп, бірақ олардың "қолданыста" екенін тауып, қайтаруын күтеді. Екі қызметкер бірін-бірі күтіп тұр, бірақ екіншісі құлыптаудан бас тартып, шотты қайтармайынша, олардың ешқайсысы да транзакциясын аяқтай алмайды. Мұндай проблемалардан аулақ болу үшін әртүрлі техникалар қолданылады.
If the bank clerks (to follow the illustration above) are serving two customers, but their accounts are contained in one ledger, then the entire ledger, or one or more database tables, would need to be made available for editing to the clerks in order for each to complete a transaction, one at a time (file locking). While safe, this method can cause unnecessary waiting. If the clerks can remove one page from the ledger, containing the account of the current customer (plus several other accounts), then multiple customers can be serviced concurrently, provided that each customer's account is found on a different page than the others. If two customers have accounts on the same page, then only one may be serviced at a time. This is analogous to a page level lock in a database. A higher degree of granularity is achieved if each individual account may be taken by a clerk. This would allow any customer to be serviced without waiting for another customer who is accessing a different account. This is analogous to a record level lock and is normally the highest degree of locking granularity in a database management system. In a SQL database, a record is typically called a "row". The introduction of granular (subset) locks creates the possibility for a situation called deadlock. Deadlock is possible when incremental locking (locking one entity, then locking one or more additional entities) is used. To illustrate, if two bank customers asked two clerks to obtain their account information so they could transfer some money into other accounts, the two accounts would essentially be locked. Then, if the customers told their clerks that the money was to be transferred into each other's accounts, the clerks would search for the other accounts but find them to be "in use" and wait for them to be returned. Unknowingly, the two clerks are waiting for each other, and neither of them can complete their transaction until the other gives up and returns the account. Various techniques are used to avoid such problems.
Ортақ құлыптар
Ортақ құлыптар жеке құлыптардан ерекшеленеді, себебі иеленушілер тізімінде бірнеше жазба болуы мүмкін. Ортақ құлыптар барлық иеленушілерге жазбаның мазмұнын оқуға мүмкіндік береді, барлық иеленушілер құлыпты босатқанға дейін жазба өзгертілмейтінін біле отырып. Егер жазбаны басқа бір ұйым (ексклюзивті немесе ортақ) құлыптаған болса, эксклюзивті құлып алу мүмкін емес. Егер бір ұйым үшін құлыптау сұраныстары кезекте тұрса, ортақ құлып берілгеннен кейін, кезектегі басқа ортақ құлыптар да берілуі мүмкін. Егер кезекте эксклюзивті құлып келесі болып тұрса, ол барлық ортақ құлыптар босатылғанша күтуі керек. Жеке құлыптар сияқты, ортақ құлыптар да мүмкіндігінше аз уақытқа иеленуі керек.
Shared locks differ from exclusive locks in that the holder list can contain multiple entries. Shared locks allow all holders to read the contents of the record knowing that the record cannot be changed until after the lock has been released by all holders. Exclusive locks cannot be obtained when a record is already locked (exclusively or shared) by another entity. If lock requests for the same entity are queued, then once a shared lock is granted, any queued shared locks may also be granted. If an exclusive lock is found next on the queue, it must wait until all shared locks have been released. As with exclusive locks, these shared locks should be held for the least time possible.