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