Transaksies en hul beheermeganismes

Transaksies

'n Transaksie is 'n reeks bewerkings op data wat 'n begin en 'n einde het.

'n Transaksie is die opeenvolgende uitvoering van lees- en skryfbewerkings. Die einde van 'n transaksie kan óf die stoor van die veranderinge (commit) óf die kanselleer van die veranderinge (terugrol) wees. Met betrekking tot 'n databasis bestaan ​​'n transaksie uit verskeie versoeke wat as 'n enkele versoek hanteer word.

Transaksies moet aan ACID eienskappe voldoen

Atomiteit. Die transaksie is óf heeltemal voltooi óf glad nie.

Konsekwentheid. Wanneer 'n transaksie voltooi word, moet die beperkings wat op die data opgelê word (byvoorbeeld beperkings in die databasis) nie oortree word nie. Konsekwentheid impliseer dat die stelsel van een korrekte toestand na 'n ander korrekte toestand oorgedra sal word.

Isolasie. Transaksies wat parallel loop, behoort nie mekaar te beïnvloed nie, byvoorbeeld verander data wat deur 'n ander transaksie gebruik word. Die resultaat van die uitvoering van parallelle transaksies moet dieselfde wees asof die transaksies opeenvolgend uitgevoer is.

Volhoubaarheid. Sodra dit toegepas is, moet veranderinge nie verlore gaan nie.

Transaksie log

Die log stoor veranderinge wat deur transaksies gemaak is, verseker atomiteit en stabiliteit van data in die geval van 'n stelselfout

Die logboek bevat die waardes wat die data gehad het voor en nadat dit deur die transaksie verander is. Voorafskryf-logstrategie vereis die byvoeging van 'n loginskrywing oor vorige waardes voor die begin, en oor finale waardes nadat die transaksie voltooi is. In die geval van 'n skielike stop van die stelsel, lees die databasis die log in omgekeerde volgorde en kanselleer die veranderinge wat deur transaksies gemaak is. Nadat 'n onderbroke transaksie teëgekom is, voer die databasis dit uit en maak veranderinge daaroor aan die logboek. Omdat die databasis in die toestand was ten tyde van die mislukking, lees die databasis die log in vorentoe volgorde en gee die veranderinge wat deur transaksies gemaak is terug. Op hierdie manier word die stabiliteit van transaksies wat reeds gepleeg is en die atomiteit van die onderbroke transaksie bewaar.

Die bloot heruitvoering van mislukte transaksies is nie voldoende vir herstel nie.

Voorbeeld. Die gebruiker het $500 in sy rekening en die gebruiker besluit om dit by 'n OTM te onttrek. Twee transaksies is aan die gang. Die eerste een lees die balanswaarde en as daar genoeg fondse op die balans is, reik dit geld aan die gebruiker uit. Die tweede trek die vereiste bedrag van die balans af. Kom ons sê die stelsel het neergestort en die eerste operasie het misluk, maar die tweede het. In hierdie geval kan ons nie weer geld aan die gebruiker uitreik sonder om die stelsel terug te keer na sy oorspronklike toestand met 'n positiewe saldo nie.

Isolasievlakke

Lees Toegewyd

Die Dirty Read-probleem is dat 'n transaksie die tussenresultaat van 'n ander transaksie kan lees.

Voorbeeld. Die aanvanklike balanswaarde is $0. T1 voeg $50 by jou balans. T2 lees die balanswaarde ($50). T1 gooi die veranderinge weg en gaan uit. T2 gaan voort met uitvoering met verkeerde balansdata.

Die oplossing is om vaste data (Read Committed) te lees, wat die lees van data verbied wat deur die transaksie verander word. As transaksie A 'n sekere stel data verander het, dan word transaksie B, wanneer toegang tot hierdie data verkry word, gedwing om te wag vir transaksie A om te voltooi.

Herhaalbare lees

Verlore opdaterings probleem. T1 stoor veranderinge bo en behalwe T2 se veranderinge.

Voorbeeld. Die aanvanklike balanswaarde is $0 en twee transaksies vul die balans gelyktydig aan. T1 en T2 lees 'n saldo van $0. T2 voeg dan $200 by $0 en stoor die resultaat. T1 voeg $100 by $0 en stoor die resultaat. Die finale resultaat is $100 in plaas van $300.

Onherhaalbare leesprobleem. Om dieselfde data herhaaldelik te lees, gee verskillende waardes terug.

Voorbeeld. T1 lees 'n balanswaarde van $0. T2 voeg dan $50 by die balans en eindig. T1 lees die data weer en vind 'n teenstrydigheid met die vorige resultaat.

Herhaalbare lees verseker dat 'n tweede lees dieselfde resultaat sal lewer. Data wat deur een transaksie gelees word, kan nie in ander verander word totdat die transaksie voltooi is nie. As transaksie A 'n sekere stel data gelees het, dan word transaksie B, wanneer toegang tot hierdie data verkry word, gedwing om te wag vir transaksie A om te voltooi.

Geordende leeswerk (Serialiseerbaar)

Phantom Reads probleem. Twee navrae wat data kies op grond van 'n sekere toestand gee verskillende waardes terug.

Voorbeeld. T1 versoek die getal van alle gebruikers wie se saldo groter as $0 maar minder as $100 is. T2 trek $1 af van 'n gebruiker met 'n saldo van $101. T1 gee die versoek weer uit.

Geordende leeswerk (Serialiseerbaar). Transaksies word as heeltemal opeenvolgend uitgevoer. Dit is verbode om rekords by te werk of by te voeg wat binne die bepalings van die versoek val. As transaksie A data van die hele tabel aangevra het, word die hele tabel vir ander transaksies gevries totdat transaksie A voltooi is.

Skeduleerder

Stel die volgorde waarin bewerkings uitgevoer moet word tydens parallelle transaksies.

Bied 'n bepaalde vlak van isolasie. As die resultaat van bewerkings nie afhang van hul volgorde nie, dan is sulke bewerkings kommutatief (Permuteerbaar). Leesbewerkings en bewerkings op verskillende data is kommutatief. Lees-skryf en skryf-skryf bewerkings is nie kommutatief nie. Die skeduleerder se taak is om bewerkings wat deur parallelle transaksies uitgevoer word, te vervleg sodat die uitvoeringsresultaat gelykstaande is aan opeenvolgende uitvoering van transaksies.

Meganismes vir die beheer van parallelle take (Gelyktydigheidsbeheer)

Optimisties is gebaseer op die opsporing en oplossing van konflikte, pessimisties is gebaseer op die voorkoming van konflikte om te ontstaan.

In die optimistiese benadering het verskeie gebruikers kopieë van die data tot hul beskikking. Die eerste persoon wat redigering voltooi, stoor die veranderinge, terwyl die ander die veranderinge moet saamvoeg. 'n Optimistiese algoritme laat konflik plaasvind, maar die stelsel moet van die konflik herstel.

Met 'n pessimistiese benadering verhoed die eerste gebruiker wat die data vaslê ander om die data te ontvang. As konflikte skaars is, is dit wys om die optimistiese strategie te kies, aangesien dit 'n hoër vlak van gelyktydigheid bied.

Sluiting

As een transaksie data gesluit het, moet ander transaksies wag totdat dit ontsluit word wanneer toegang tot die data verkry word.

'n Blok kan op 'n databasis, tabel, ry of kenmerk oorgelê word. Gedeelde slot kan deur verskeie transaksies op dieselfde data afgedwing word, laat alle transaksies (insluitend die een wat dit opgelê het) toe om te lees, verbied wysiging en eksklusiewe vaslegging. Exclusive Lock kan slegs deur een transaksie opgelê word, laat enige handelinge van die imposerende transaksie toe, verbied enige handelinge deur ander.

'n Dooiepunt is 'n situasie waar transaksies in 'n hangende toestand beland wat onbepaald duur.

Voorbeeld. Die eerste transaksie wag vir die data wat deur die tweede vasgelê is om vrygestel te word, terwyl die tweede wag vir die data wat deur die eerste vasgelê is om vrygestel te word.

’n Optimistiese oplossing vir die dooiepunt-probleem laat die dooiepunt voorkom, maar herstel dan die stelsel deur een van die transaksies wat by die dooiepunt betrokke is, terug te rol.

Daar word met sekere tussenposes na dooiepunte gesoek. Een van die opsporingsmetodes is deur tyd, dit wil sê, in ag neem dat 'n dooiepunt plaasgevind het as die transaksie te lank neem om te voltooi. Wanneer 'n dooiepunt gevind word, word een van die transaksies teruggerol, sodat ander transaksies betrokke by die dooiepunt kan voltooi. Die keuse van slagoffer kan gebaseer word op die waarde van transaksies of hul senioriteit (Wait-Die en Wound-Wit-skemas).

Elke transaksie T 'n tydstempel word toegeken TS wat die begintyd van die transaksie bevat.

Wag-Sterf.

As TS(Ti) < TS(Tj), Dan Ti wag, anders Ti rol terug en begin weer met dieselfde tydstempel.

As 'n jong transaksie 'n hulpbron verkry het en 'n ouer transaksie versoek dieselfde hulpbron, dan word die ouer transaksie toegelaat om te wag. As 'n ouer transaksie 'n hulpbron verkry het, sal die jonger transaksie wat daardie hulpbron versoek, teruggerol word.

Wond-wag.

As TS(Ti) < TS(Tj), Dan Tj rol terug en begin weer met dieselfde tydstempel, anders Ti wag.

As 'n jonger transaksie 'n hulpbron verkry het en 'n ouer transaksie versoek dieselfde hulpbron, dan sal die jonger transaksie teruggerol word. As 'n ouer transaksie 'n hulpbron verkry het, word die jonger transaksie wat daardie hulpbron versoek, toegelaat om te wag. Voorrang-gebaseerde slagofferseleksie voorkom dooiepunte, maar rol transaksies terug wat nie vasgeval is nie. Die probleem is dat transaksies baie keer teruggerol kan word omdat... 'n ouer transaksie kan die hulpbron vir 'n lang tyd hou.

'n Pessimistiese oplossing vir die dooiepuntprobleem laat nie toe dat 'n transaksie begin uitvoer as daar 'n risiko van 'n dooiepunt is nie.

Om 'n dooiepunt op te spoor, word 'n grafiek saamgestel (wag-grafiek, wag-vir-grafiek), waarvan die hoekpunte transaksies is, en die rande word gerig van transaksies wat wag vir die vrystelling van data na die transaksie wat hierdie data vasgelê het. 'n Dooiepunt word beskou as plaasgevind het as die grafiek 'n lus het. Die bou van 'n waggrafiek, veral in verspreide databasisse, is 'n duur prosedure.

Tweefase-sluiting - voorkom dooiepunte deur beslag te lê op alle hulpbronne wat deur 'n transaksie aan die begin van die transaksie gebruik word en dit aan die einde vry te stel

Alle blokkeerbewerkings moet die eerste ontsluit een voorafgaan. Dit het twee fases – Groeifase, waartydens die grepe ophoop, en Krimpfase, waartydens die grepe losgelaat word. As dit onmoontlik is om een ​​van die hulpbronne te vang, begin die transaksie oor. Dit is moontlik dat 'n transaksie nie die nodige hulpbronne sal kan bekom nie, byvoorbeeld as verskeie transaksies om dieselfde hulpbronne meeding.

'n Twee-fase commit verseker dat die commit op alle databasis replikas uitgevoer word

Elke databasis voer inligting oor die data wat verander sal word in die log in en reageer op die koördineerder OK (Stemfase). Nadat almal OK gereageer het, stuur die koördineerder 'n sein wat almal verplig om te pleeg. Nadat hulle gepleeg is, reageer die bedieners OK; as ten minste een nie OK reageer nie, stuur die koördineerder 'n sein om die veranderinge aan alle bedieners te kanselleer (Voltooiingsfase).

Tydstempel metode

'n Ouer transaksie word teruggerol wanneer gepoog word om toegang te verkry tot data wat by 'n jonger transaksie betrokke is

Elke transaksie word 'n tydstempel toegeken TS wat ooreenstem met die begintyd van uitvoering. As Ti ouer Tj, Dan TS(Ti) < TS(Tj).

Wanneer 'n transaksie teruggerol word, word 'n nuwe tydstempel daaraan toegeken. Elke data-objek Q betrokke by die transaksie is gemerk met twee etikette. W-TS(Q) — tydstempel van die jongste transaksie wat 'n rekord suksesvol voltooi het Q. R-TS(Q) — tydstempel van die jongste transaksie waarop 'n leesrekord uitgevoer is Q.

Wanneer die transaksie T versoeke om data te lees Q Daar is twee opsies.

As TS(T) < W-TS(Q), dit wil sê, die data is opgedateer deur 'n jonger transaksie, dan die transaksie T rol terug.

As TS(T) >= W-TS(Q), dan word die lees uitgevoer en R-TS(Q) word MAX(R-TS(Q), TS(T)).

Wanneer die transaksie T versoek dataveranderings Q Daar is twee opsies.

As TS(T) < R-TS(Q), dit wil sê, die data is reeds deur 'n jonger transaksie gelees en as 'n verandering gemaak word, sal 'n konflik ontstaan. Transaksie T rol terug.

As TS(T) < W-TS(Q), dit wil sê, die transaksie probeer om 'n nuwer waarde te oorskryf, transaksie T word teruggerol. In ander gevalle word die verandering uitgevoer en W-TS(Q) gelyk word TS(T).

Geen duur waggrafiekkonstruksie is nodig nie. Ouer transaksies is afhanklik van nuwes, so daar is geen siklusse in die waggrafiek nie. Daar is geen dooiepunte nie, want transaksies word nie gewag nie, maar onmiddellik teruggerol. Cascading rollbacks is moontlik. As Ti weggerol en Tj Ek lees die data wat ek verander het Ti, Dan Tj moet ook terugrol. As terselfdertyd Tj reeds gepleeg is, dan sal daar 'n skending van die beginsel van stabiliteit wees.

Een van die oplossings vir kaskade terugdraai. 'n Transaksie voltooi alle skryfbewerkings aan die einde, en ander transaksies moet wag vir daardie bewerking om te voltooi. Transaksies wag om gepleeg te word voordat dit gelees word.

Thomas skryfreël - 'n variasie van die tydstempelmetode waarin data wat deur 'n jonger transaksie opgedateer is, verbied word om deur 'n ouer een oorskryf te word

Transaksie T versoek dataveranderings Q. indien TS(T) < W-TS(Q), dit wil sê, die transaksie probeer om 'n nuwer waarde te oorskryf, transaksie T word nie teruggerol soos in die tydstempelmetode nie.

Bron: will.com

Voeg 'n opmerking