Darījumi un to kontroles mehānismi

Darījumi

Darījums ir darbību secība ar datiem, kam ir sākums un beigas.

DarÄ«jums ir lasÄ«Å”anas un rakstÄ«Å”anas darbÄ«bu secÄ«ga izpilde. DarÄ«juma beigas var bÅ«t vai nu izmaiņu saglabāŔana (apstiprināŔana), vai izmaiņu atcelÅ”ana (atcelÅ”ana). SaistÄ«bā ar datu bāzi transakcija sastāv no vairākiem pieprasÄ«jumiem, kas tiek uzskatÄ«ti par vienu pieprasÄ«jumu.

Darījumiem ir jāatbilst ACID īpaŔībām

Atomiskums. Darījums tiek pabeigts pilnībā vai nepabeigts vispār.

Konsekvence. Noslēdzot darījumu, nedrīkst pārkāpt datiem uzliktos ierobežojumus (piemēram, ierobežojumus datu bāzē). Konsekvence nozīmē, ka sistēma tiks pārsūtīta no viena pareizā stāvokļa uz citu pareizo stāvokli.

Izolācija. Paralēli veiktie darÄ«jumi nedrÄ«kst ietekmēt viens otru, piemēram, mainÄ«t cita darÄ«juma izmantotos datus. Paralēlo darÄ«jumu izpildes rezultātam jābÅ«t tādam paÅ”am kā tad, ja darÄ«jumi tiktu izpildÄ«ti secÄ«gi.

Ilgtspējība. Kad esat izdarījis, izmaiņas nedrīkst zaudēt.

Darījumu žurnāls

Žurnāls glabā transakciju veiktās izmaiņas, nodroÅ”ina datu atomitāti un stabilitāti sistēmas atteices gadÄ«jumā

Žurnālā ir vērtÄ«bas, kas datiem bija pirms un pēc darÄ«juma mainÄ«Å”anas. PriekÅ”rakstÄ«Å”anas žurnāla stratēģijai ir jāpievieno žurnāla ieraksts par iepriekŔējām vērtÄ«bām pirms sākuma un par galÄ«gajām vērtÄ«bām pēc darÄ«juma pabeigÅ”anas. Sistēmas pēkŔņas apstāŔanās gadÄ«jumā datu bāze nolasa žurnālu apgrieztā secÄ«bā un atceļ transakciju veiktās izmaiņas. Saskārusies ar pārtrauktu darÄ«jumu, datu bāze to izpilda un veic izmaiņas žurnālā. Atrodoties kļūmes brÄ«dÄ«, datu bāze nolasa žurnālu uz priekÅ”u un atgriež transakciju veiktās izmaiņas. Tādējādi tiek saglabāta jau veikto darÄ«jumu stabilitāte un pārtrauktā darÄ«juma atomitāte.

AtkopŔanai nepietiek tikai ar neveiksmīgu darījumu atkārtotu izpildi.

Piemērs. Lietotāja kontā ir 500 USD, un lietotājs nolemj tos izņemt no bankomāta. Notiek divi darÄ«jumi. Pirmais nolasa bilances vērtÄ«bu un, ja atlikumā ir pietiekami daudz lÄ«dzekļu, tas izsniedz lietotājam naudu. Otrais no atlikuma atņem nepiecieÅ”amo summu. Pieņemsim, ka sistēma avarēja un pirmā darbÄ«ba neizdevās, bet otrā. Å ajā gadÄ«jumā mēs nevaram atkārtoti izsniegt naudu lietotājam, neatgriežot sistēmu sākotnējā stāvoklÄ« ar pozitÄ«vu bilanci.

Izolācijas līmeņi

Lasīt Apņēmies

NetÄ«rās lasÄ«Å”anas problēma ir tāda, ka darÄ«jums var nolasÄ«t cita darÄ«juma starprezultātu.

Piemērs. Sākotnējā bilances vērtÄ«ba ir 0 USD. T1 jÅ«su atlikumam pievieno 50 ASV dolārus. T2 nolasa bilances vērtÄ«bu ($50). T1 atmet izmaiņas un iziet. T2 turpina izpildi ar nepareiziem bilances datiem.

Risinājums ir fiksēto datu nolasÄ«Å”ana (Read Committed), kas aizliedz nolasÄ«t datus, kas mainÄ«ti darÄ«juma rezultātā. Ja darÄ«jums A ir mainÄ«jis noteiktu datu kopu, tad darÄ«jums B, piekļūstot Å”iem datiem, ir spiests gaidÄ«t darÄ«juma A pabeigÅ”anu.

Atkārtojama lasāmviela

Pazaudēto atjauninājumu problēma. T1 saglabā izmaiņas papildus T2 izmaiņām.

Piemērs. Sākotnējā bilances vērtība ir 0 ASV dolāri, un divi darījumi vienlaikus papildina atlikumu. T1 un T2 nolasīja atlikumu 0 ASV dolāru apmērā. Pēc tam T2 pievieno $200 $0 un saglabā rezultātu. T1 pievieno $ 100 $ 0 un saglabā rezultātu. Gala rezultāts ir 100 USD, nevis 300 USD.

Neatkārtojama lasÄ«Å”anas problēma. Atkārtoti lasot vienus un tos paÅ”us datus, tiek atgrieztas dažādas vērtÄ«bas.

Piemērs. T1 nolasa bilances vērtÄ«bu USD 0. Pēc tam T2 atlikumam pievieno USD 50 un beidzas. T1 vēlreiz nolasa datus un atrod neatbilstÄ«bu iepriekŔējam rezultātam.

Atkārtota lasÄ«Å”ana nodroÅ”ina, ka otrajā lasÄ«jumā tiks atgriezts tāds pats rezultāts. Viena darÄ«juma nolasÄ«tos datus nevar mainÄ«t citās, kamēr darÄ«jums nav pabeigts. Ja darÄ«jums A ir nolasÄ«jis noteiktu datu kopu, tad darÄ«jums B, piekļūstot Å”iem datiem, ir spiests gaidÄ«t darÄ«juma A pabeigÅ”anu.

Pasūtīts lasījums (serializējams)

Phantom Reads problēma. Divi vaicājumi, kas atlasa datus, pamatojoties uz noteiktu nosacījumu, atgriež dažādas vērtības.

Piemērs. T1 pieprasa visu to lietotāju skaitu, kuru atlikums ir lielāks par 0 ASV dolāriem, bet mazāks par 100 ASV dolāriem. T2 no lietotāja, kura atlikums ir 1 ASV dolārs, atskaita 101 ASV dolāru. T1 atkārtoti izsniedz pieprasÄ«jumu.

PasÅ«tÄ«ts lasÄ«jums (Serializējams). DarÄ«jumi tiek veikti pilnÄ«gi secÄ«gi. Ir aizliegts atjaunināt vai pievienot ierakstus, kas atbilst pieprasÄ«juma nosacÄ«jumiem. Ja darÄ«jums A ir pieprasÄ«jis datus no visas tabulas, visa tabula tiek iesaldēta citiem darÄ«jumiem, lÄ«dz tiek pabeigts darÄ«jums A.

Plānotājs

Iestata secību, kādā jāveic darbības paralēlu darījumu laikā.

NodroÅ”ina noteiktu izolācijas lÄ«meni. Ja darbÄ«bu rezultāts nav atkarÄ«gs no to secÄ«bas, tad Ŕādas darbÄ«bas ir komutatÄ«vas (Permutable). LasÄ«Å”anas operācijas un darbÄ«bas ar dažādiem datiem ir komutatÄ«vas. LasÄ«Å”anas-rakstÄ«Å”anas un rakstÄ«Å”anas-rakstÄ«Å”anas darbÄ«bas nav komutatÄ«vas. Plānotāja uzdevums ir veikt paralēlo transakciju veiktās operācijas, lai izpildes rezultāts bÅ«tu lÄ«dzvērtÄ«gs secÄ«gai darÄ«jumu izpildei.

Mehānismi paralēlu darbu kontrolei (vienlaicīguma kontrole)

Optimisma pamatā ir konfliktu atklāŔana un risināŔana, pesimistiskā ā€“ konfliktu raÅ”anās novērÅ”ana.

Optimistiskā pieejā vairākiem lietotājiem ir datu kopijas. Pirmā persona, kas pabeidz rediģēŔanu, saglabā izmaiņas, bet pārējiem ir jāapvieno izmaiņas. Optimistisks algoritms pieļauj konflikta raÅ”anos, bet sistēmai ir jāatgÅ«stas no konflikta.

Izmantojot pesimistisku pieeju, pirmais lietotājs, kurÅ” iegÅ«st datus, neļauj citiem saņemt datus. Ja konflikti ir reti, ir prātÄ«gi izvēlēties optimistisku stratēģiju, jo tā nodroÅ”ina augstāku vienlaicÄ«bas lÄ«meni.

BloķēŔana

Ja vienā darījumā ir bloķēti dati, tad citiem darījumiem, piekļūstot datiem, jāgaida, līdz tas tiek atbloķēts.

Bloku var pārklāt ar datu bāzi, tabulu, rindu vai atribÅ«tu. KopÄ«gotu bloÄ·Ä“Å”anu var uzlikt vieniem un tiem paÅ”iem datiem ar vairākiem darÄ«jumiem, tas ļauj nolasÄ«t visus darÄ«jumus (ieskaitot to, kas to uzlika), aizliedz modifikācijas un ekskluzÄ«vu tverÅ”anu. EkskluzÄ«vā bloÄ·Ä“Å”ana var tikt uzlikta tikai ar vienu darÄ«jumu, pieļauj jebkādas uzliekoŔā darÄ«juma darbÄ«bas, aizliedz jebkuras citas darbÄ«bas.

StrupceļŔ ir situācija, kad darījumi nonāk gaidīŔanas stāvoklī, kas ilgst bezgalīgi.

Piemērs. Pirmajā transakcijā tiek gaidīts, ka tiks atbrīvoti otrā tvertie dati, bet otrais gaida, līdz tiks atbrīvoti dati, ko tverts pirmais.

Optimistisks strupceļa problēmas risinājums ļauj iestāties strupceļā, bet pēc tam atjauno sistēmu, atceļot vienu no strupceļā iesaistītajiem darījumiem.

Noteiktos intervālos tiek meklēti strupceļi. Viena no noteikÅ”anas metodēm ir pēc laika, tas ir, uzskata, ka ir iestājies strupceļŔ, ja darÄ«juma pabeigÅ”ana prasa pārāk ilgu laiku. Kad tiek atrasts strupceļŔ, viens no darÄ«jumiem tiek atcelts, ļaujot pabeigt citiem strupceļā iesaistÄ«tajiem darÄ«jumiem. Upura izvēle var bÅ«t balstÄ«ta uz darÄ«jumu vērtÄ«bu vai to darba stāžu (Wait-Die un Wound-wait shēmas).

Katrs darījums T tiek pieŔķirts laika zīmogs TS kas satur darījuma sākuma laiku.

Pagaidi-die.

Ja TS(Ti) < TS(Tj)tad Ti gaida, citādi Ti rit atpakaļ un sāk no jauna ar to paŔu laikspiedolu.

Ja jauns darījums ir ieguvis resursu un vecā transakcija pieprasa to paŔu resursu, tad vecākajam darījumam ir atļauts gaidīt. Ja vecāka transakcija ir ieguvusi resursu, jaunākā transakcija, kas pieprasa Ŕo resursu, tiks atsaukta.

Brūce-pagaidi.

Ja TS(Ti) < TS(Tj)tad Tj atrit atpakaļ un sāk no jauna ar to paÅ”u laikspiedolu, pretējā gadÄ«jumā Ti gaida.

Ja jaunāks darÄ«jums ir ieguvis resursu un vecā transakcija pieprasa to paÅ”u resursu, jaunākais darÄ«jums tiks atsaukts. Ja vecāka transakcija ir ieguvusi resursu, tad jaunākajam darÄ«jumam, kas pieprasa Å”o resursu, ir atļauts gaidÄ«t. Uz prioritāti balstÄ«ta upuru atlase novērÅ” strupceļus, bet atceļ darÄ«jumus, kas nav nonākuÅ”i strupceļā. Problēma ir tā, ka darÄ«jumus var daudzas reizes atsaukt, jo... vecāks darÄ«jums var glabāt resursus ilgu laiku.

Pesimistisks strupceļa problēmas risinājums neļauj uzsākt darījuma izpildi, ja pastāv strupceļa risks.

Lai atklātu strupceļu, tiek izveidots grafs (waiting graph, wait-for-graph), kura virsotnes ir transakcijas, un malas tiek novirzÄ«tas no transakcijām, kas gaida datu izlaiÅ”anu, uz transakciju, kas ir tvērusi Å”os datus. Tiek uzskatÄ«ts, ka strupceļŔ ir noticis, ja grafikā ir cilpa. GaidÄ«Å”anas grafika izveidoÅ”ana, Ä«paÅ”i izplatÄ«tās datu bāzēs, ir dārga procedÅ«ra.

Divfāžu bloÄ·Ä“Å”ana - novērÅ” strupceļus, aizturot visus darÄ«juma izmantotos resursus darÄ«juma sākumā un atbrÄ«vojot tos beigās

Visām bloÄ·Ä“Å”anas darbÄ«bām ir jāveic pirms pirmās atbloÄ·Ä“Å”anas. Tam ir divas fāzes - augÅ”anas fāze, kuras laikā rokturi uzkrājas, un sarauÅ”anās fāze, kuras laikā rokturi tiek atbrÄ«voti. Ja nav iespējams iegÅ«t kādu no resursiem, darÄ«jums sākas no jauna. Iespējams, ka darÄ«jums nevarēs iegÅ«t nepiecieÅ”amos resursus, piemēram, ja par vieniem un tiem paÅ”iem resursiem sacenÅ”as vairāki darÄ«jumi.

Divu fāžu apstiprināŔana nodroŔina, ka tā tiek izpildīta visās datu bāzes replikās

Katra datu bāze ievada žurnālā informāciju par datiem, kas tiks mainÄ«ti, un atbild koordinatoram OK (balsoÅ”anas fāze). Kad visi ir atbildējuÅ”i labi, koordinators nosÅ«ta signālu, liekot visiem apņemties. Pēc apņemÅ”anās serveri atbild OK; ja vismaz viens nereaģē labi, koordinators nosÅ«ta signālu, lai atceltu izmaiņas visiem serveriem (PabeigÅ”anas fāze).

Laika zīmoga metode

Vecāks darījums tiek atcelts, mēģinot piekļūt jaunākā darījuma datiem

Katram darījumam tiek pieŔķirts laikspiedols TS kas atbilst izpildes sākuma laikam. Ja Ti vecāki Tjtad TS(Ti) < TS(Tj).

Kad darÄ«jums tiek atcelts, tam tiek pieŔķirts jauns laikspiedols. Katrs datu objekts Q darÄ«jumā iesaistÄ«tais ir apzÄ«mēts ar divām etiÄ·etēm. W-TS(Q) ā€” jaunākā darÄ«juma laikspiedols, kas veiksmÄ«gi pabeidza ierakstu Q. R-TS(Q) ā€” jaunākā darÄ«juma laikspiedols, kurā tika veikts lasÄ«Å”anas ieraksts Q.

Kad darījums T pieprasījumi nolasīt datus Q Ir divi varianti.

Ja TS(T) < W-TS(Q), tas ir, dati tika atjaunināti ar jaunāku darījumu, tad darījums T ripo atpakaļ.

Ja TS(T) >= W-TS(Q), tad tiek veikta nolasīŔana un R-TS(Q) kļūst MAX(R-TS(Q), TS(T)).

Kad darījums T pieprasa datu izmaiņas Q Ir divi varianti.

Ja TS(T) < R-TS(Q), tas ir, datus jau ir nolasījis jaunāks darījums un, ja tiek veiktas izmaiņas, radīsies konflikts. Darījums T ripo atpakaļ.

Ja TS(T) < W-TS(Q), tas ir, darījums mēģina pārrakstīt jaunāku vērtību, transakcija T tiek atgriezta atpakaļ. Citos gadījumos maiņa tiek veikta un W-TS(Q) kļūst vienāds TS(T).

Nav nepiecieÅ”ama dārga gaidÄ«Å”anas grafika konstrukcija. Vecāki darÄ«jumi ir atkarÄ«gi no jaunākiem, tāpēc gaidÄ«Å”anas grafikā nav ciklu. Nav strupceļu, jo darÄ«jumi netiek gaidÄ«ti, bet gan nekavējoties atcelti. Ir iespējama kaskādes atgrieÅ”ana. Ja Ti aizripojis un Tj Es izlasÄ«ju datus, kurus mainÄ«ju Titad Tj arÄ« jāatvelk. Ja tajā paŔā laikā Tj jau ir izdarÄ«ts, tad bÅ«s stabilitātes principa pārkāpums.

Viens no risinājumiem kaskādes atgrieŔanai. Darījums pabeidz visas rakstīŔanas darbības beigās, un citiem darījumiem ir jāgaida, līdz Ŕī darbība tiks pabeigta. Darījumi pirms nolasīŔanas gaida, līdz tie tiks veikti.

Tomasa rakstÄ«Å”anas noteikums ā€” laika zÄ«moga metodes variants, kurā jaunāka darÄ«juma atjauninātos datus ir aizliegts pārrakstÄ«t vecākam darÄ«jumam.

Darījums T pieprasa datu izmaiņas Q. Ja TS(T) < W-TS(Q), tas ir, transakcija mēģina pārrakstīt jaunāku vērtību, transakcija T netiek atgriezta kā laikspiedola metodē.

Avots: www.habr.com

Pievieno komentāru