Viðskipti og eftirlitskerfi þeirra

Viðskipti

Færsla er röð aðgerða á gögnum sem hafa upphaf og endi.

Færsla er raðframkvæmd lestrar- og skrifaðgerða. Lok viðskipta getur annað hvort verið að vista breytingarnar (skuldbinda) eða hætta við breytingarnar (afturkalla). Í tengslum við gagnagrunn samanstendur viðskipti af nokkrum beiðnum sem eru meðhöndluð sem ein beiðni.

Viðskipti verða að uppfylla ACID eiginleika

Atómvirkni. Viðskiptunum er annað hvort lokið að fullu eða alls ekki.

Samræmi. Þegar viðskiptum er lokið má ekki brjóta þær takmarkanir sem settar eru á gögnin (td skorður í gagnagrunninum). Samræmi felur í sér að kerfið verður flutt úr einu réttu ástandi í annað rétt ástand.

Einangrun. Samhliða viðskipti ættu ekki að hafa áhrif hver á aðra, td breyta gögnum sem önnur viðskipti nota. Niðurstaðan af því að framkvæma samhliða viðskipti ætti að vera sú sama og ef viðskiptin væru framkvæmd í röð.

Sjálfbærni. Eftir að hafa verið framið ættu breytingar ekki að tapast.

Færsluskrá

Skráin geymir breytingar sem gerðar eru af viðskiptum, tryggir atómvirkni og stöðugleika gagna ef kerfisbilun verður

Skráin inniheldur gildin sem gögnin höfðu fyrir og eftir að þeim var breytt með viðskiptunum. Fyrirframskráningaraðferð krefst þess að bæta við skráningarfærslu um fyrri gildi fyrir upphaf og um lokagildi eftir að viðskiptunum er lokið. Ef kerfið stöðvast skyndilega les gagnagrunnurinn innskráninguna í öfugri röð og hættir við breytingar sem gerðar hafa verið af viðskiptum. Eftir að hafa rekist á truflun á viðskiptum, keyrir gagnagrunnurinn hana og gerir breytingar á henni á annálnum. Þar sem gagnagrunnurinn er í ástandinu þegar bilunin varð, les gagnagrunnurinn innskráninguna í framvirkri röð og skilar þeim breytingum sem gerðar hafa verið af viðskiptum. Þannig varðveitist stöðugleiki viðskipta sem þegar hafa verið framin og atómvirkni hinna trufluðu viðskipta.

Það er ekki nóg að endurheimta misheppnuð viðskipti.

Dæmi. Notandinn á $500 á reikningnum sínum og notandinn ákveður að taka þá út úr hraðbanka. Tvö viðskipti eru í gangi. Sá fyrsti les jafnvægisgildið og ef það er nóg fjármagn á stöðunni gefur hann út peninga til notandans. Annað dregur nauðsynlega upphæð frá stöðunni. Segjum að kerfið hafi hrunið og fyrsta aðgerðin mistókst, en sú seinni. Í þessu tilviki getum við ekki endurútgefið peninga til notandans án þess að koma kerfinu aftur í upprunalegt ástand með jákvæðri stöðu.

Einangrunarstig

Lestu skuldbundið

Dirty Read vandamálið er að viðskipti geta lesið milliniðurstöðu annarra viðskipta.

Dæmi. Upphafsstöðugildi er $0. T1 bætir $50 við stöðuna þína. T2 les jafnvægisgildið ($50). T1 fleygir breytingunum og hættir. T2 heldur áfram framkvæmd með röngum jafnvægisgögnum.

Lausnin er að lesa föst gögn (Read Committed), sem bannar lestur gagna sem breytt er af viðskiptunum. Ef færslu A hefur breytt ákveðnu mengi gagna, þá neyðist færslu B, þegar aðgangur er að þessum gögnum, til að bíða eftir að færslu A ljúki.

Endurtekinn lestur

Vandamál með glataðar uppfærslur. T1 vistar breytingar ofan á breytingar T2.

Dæmi. Upphaflegt jafnvægisgildi er $0 og tvær færslur endurnýja stöðuna samtímis. T1 og T2 lesa stöðuna $0. T2 bætir síðan $200 við $0 og vistar niðurstöðuna. T1 bætir $100 við $0 og vistar niðurstöðuna. Lokaniðurstaðan er $100 í stað $300.

Óendurtekið lestrarvandamál. Að lesa sömu gögnin endurtekið skilar mismunandi gildum.

Dæmi. T1 les jafnvægisgildi $0. T2 bætir svo $50 við stöðuna og lýkur. T1 les gögnin aftur og finnur ósamræmi við fyrri niðurstöðu.

Endurtekinn lestur tryggir að annar lestur skili sömu niðurstöðu. Ekki er hægt að breyta gögnum sem eru lesin af einni færslu í öðrum fyrr en færslunni er lokið. Ef færslu A hefur lesið tiltekið safn af gögnum, þá neyðist færslu B, þegar aðgangur er að þessum gögnum, til að bíða eftir að færslu A ljúki.

Pantaður lestur (serializeable)

Phantom Reads vandamál. Tvær fyrirspurnir sem velja gögn út frá ákveðnu ástandi skila mismunandi gildum.

Dæmi. T1 biður um fjölda allra notenda sem hafa meira en $0 en minna en $100. T2 dregur $1 frá notanda með innstæðu upp á $101. T1 sendir beiðnina aftur út.

Pantaður lestur (Serializable). Viðskipti eru framkvæmd í fullri röð. Bannað er að uppfæra eða bæta við skrám sem falla undir skilmála beiðninnar. Ef færslu A hefur beðið um gögn úr allri töflunni, þá er öll taflan fryst fyrir aðrar færslur þar til færslu A lýkur.

Dagskrármaður

Stillir röð aðgerða í samhliða færslum.

Veitir tiltekið stig einangrunar. Ef niðurstaða aðgerða er ekki háð röð þeirra, þá eru slíkar aðgerðir commutative (Permutable). Lestraraðgerðir og aðgerðir á mismunandi gögnum eru kommutandi. Lesa-skrifa og skrifa-skrifa aðgerðir eru ekki commutative. Verkefni tímaáætlunarmannsins er að flétta aðgerðir sem gerðar eru af samhliða viðskiptum þannig að framkvæmdarniðurstaðan jafngildi raðbundinni framkvæmd viðskipta.

Aðferðir til að stjórna samhliða störfum (samhliða eftirlit)

Bjartsýni byggir á því að greina og leysa átök, svartsýni byggir á því að koma í veg fyrir að átök komi upp.

Í bjartsýnisaðferðinni hafa margir notendur afrit af gögnunum til umráða. Sá sem fyrstur klárar breytingar vistar breytingarnar en hinir verða að sameina breytingarnar. Bjartsýnt reiknirit leyfir átökum að eiga sér stað, en kerfið verður að jafna sig eftir átökin.

Með svartsýnni nálgun kemur fyrsti notandinn til að fanga gögnin í veg fyrir að aðrir fái gögnin. Ef átök eru sjaldgæf er skynsamlegt að velja bjartsýnisstefnuna, þar sem hún veitir meiri samhliða.

Læsing

Ef ein færsla hefur læst gögn, þá verða önnur viðskipti að bíða þar til þau eru opnuð þegar þau fá aðgang að gögnunum.

Hægt er að leggja blokk á gagnagrunn, töflu, línu eða eigind. Samnýtt læsing er hægt að setja á sömu gögnin með nokkrum færslum, gerir öllum færslum (þar á meðal þeirri sem lagði hana á) til að lesa, bannar breytingar og einkafanga. Einkalás er aðeins hægt að beita með einni færslu, leyfir allar aðgerðir vígsluviðskiptanna, bannar allar aðgerðir annarra.

Kyrrstaða er staða þar sem viðskipti lenda í biðstöðu sem varir endalaust.

Dæmi. Fyrsta færslan bíður eftir að gögnin sem hin síðari eru tekin séu gefin út, en sú seinni bíður eftir að gögnin sem sú fyrri er tekin verði gefin út.

Bjartsýn lausn á stöðvunarvandanum gerir stöðvuninni kleift að eiga sér stað, en endurheimtir síðan kerfið með því að afturkalla eina af viðskiptunum sem taka þátt í stöðvuninni.

Leitað er að stöðvum með vissu millibili. Ein af uppgötvunaraðferðunum er með tíma, það er að íhuga að stöðvun hafi átt sér stað ef viðskiptin taka of langan tíma að ljúka. Þegar stöðvun er fundin er einni færslunni snúið til baka, sem gerir öðrum færslum sem taka þátt í stöðvuninni kleift að ljúka. Val á fórnarlamb getur byggt á verðmæti viðskipta eða starfsaldur þeirra (Wait-Die og Wound-wait kerfi).

Sérhver viðskipti T tímastimpli er úthlutað TS sem inniheldur upphafstíma viðskipta.

Bíddu-deyja.

Ef TS(Ti) < TS(Tj)þá Ti bíður, annars Ti rúlla til baka og byrja aftur með sama tímastimpli.

Ef ung viðskipti hafa eignast tilföng og eldri færsla biður um sama tilfang, þá er eldri færslan látin bíða. Ef eldri færsla hefur eignast tilföng, þá verður yngri færslan sem biður um þá tilföng afturkölluð.

Sár-bið.

Ef TS(Ti) < TS(Tj)þá Tj rúlla til baka og byrja aftur með sama tímastimpli, annars Ti bíður.

Ef yngri færsla hefur eignast tilföng og eldri færsla biður um sama tilfang, þá verður yngri færslan afturkölluð. Ef eldri færsla hefur eignast tilföng, þá er yngri færslan sem biður um það tilföng leyft að bíða. Forgangsbundið fórnarlambaval kemur í veg fyrir stöðvun, en dregur aftur úr færslum sem eru ekki í lausu lofti. Vandamálið er að hægt er að draga færslur til baka mörgum sinnum vegna þess að... Eldri viðskipti geta haldið auðlindinni í langan tíma.

Svartsýn lausn á kyrrstöðuvandamálinu gerir ekki kleift að hefja viðskipti ef hætta er á stöðvun.

Til að greina stöðvun er grafið smíðað (biðlínurit, biðlínurit), þar sem hornpunktarnir eru færslur, og brúnirnar eru beint frá færslum sem bíða eftir losun gagna til færslunnar sem hefur náð þessum gögnum. Stöðvun telst hafa átt sér stað ef línuritið er með lykkju. Að búa til biðlínurit, sérstaklega í dreifðum gagnagrunnum, er dýr aðferð.

Tveggja fasa læsing - kemur í veg fyrir stöðvun með því að leggja hald á öll tilföng sem notuð eru við viðskipti í upphafi viðskipta og sleppa þeim í lok viðskipta

Allar lokunaraðgerðir verða að koma á undan fyrstu aflæsingu. Það hefur tvo áfanga - vaxtarfasa, þar sem gripin safnast fyrir, og minnkandi fasa, þar sem gripin eru sleppt. Ef það er ómögulegt að fanga eina af auðlindunum byrja viðskiptin aftur. Hugsanlegt er að viðskipti geti ekki aflað nauðsynlegra auðlinda, til dæmis ef nokkur viðskipti keppa um sömu auðlindir.

Tveggja fasa commit tryggir að commit sé framkvæmt á öllum gagnagrunns eftirmyndum

Hver gagnagrunnur setur inn upplýsingar um gögnin sem verður breytt inn í loginn og svarar samræmingarstjóra OK (Voting Phase). Eftir að allir hafa svarað í lagi sendir umsjónarmaðurinn merki sem skyldar alla til að skuldbinda sig. Eftir að hafa skuldbundið sig svara netþjónarnir í lagi; ef að minnsta kosti einn svarar ekki í lagi, þá sendir umsjónarmaður merki um að hætta við breytingar á öllum netþjónum (lokunaráfangi).

Tímastimplaaðferð

Eldri færslu er snúið til baka þegar reynt er að fá aðgang að gögnum sem tengjast yngri færslu

Hverri færslu er úthlutað tímastimpli TS sem samsvarar upphafstíma framkvæmdar. Ef Ti eldri Tjþá TS(Ti) < TS(Tj).

Þegar færslu er snúið til baka er henni úthlutað nýjum tímastimpli. Hver gagnahlutur Q sem taka þátt í viðskiptunum er merkt með tveimur miðum. W-TS(Q) — tímastimpill yngstu færslunnar sem tókst að ljúka skráningu Q. R-TS(Q) — tímastimpill yngstu færslunnar sem framkvæmdi lestrarfærslu á Q.

Þegar viðskiptin T beiðnir um að lesa gögn Q Það eru tveir valkostir.

Ef TS(T) < W-TS(Q), það er að gögnin voru uppfærð af yngri færslu, síðan færslunni T rúllar til baka.

Ef TS(T) >= W-TS(Q), þá er lesturinn fluttur og R-TS(Q) er að verða MAX(R-TS(Q), TS(T)).

Þegar viðskiptin T óskar eftir gagnabreytingum Q Það eru tveir valkostir.

Ef TS(T) < R-TS(Q), það er að gögnin hafa þegar verið lesin af yngri færslu og ef breyting er gerð munu átök koma upp. Viðskipti T rúllar til baka.

Ef TS(T) < W-TS(Q), það er, viðskiptin reyna að skrifa yfir nýrra gildi, færslu T er snúið til baka. Í öðrum tilvikum er breytingin framkvæmd og W-TS(Q) verður jafnt TS(T).

Engin dýr biðlínagerð er nauðsynleg. Eldri færslur eru háðar nýrri, svo það eru engar lotur í biðlínunni. Það eru engir biðstöður vegna þess að viðskiptum er ekki beðið heldur afturkallað strax. Cascading rollbacks eru mögulegar. Ef Ti velt í burtu, og Tj Ég las gögnin sem ég breytti Tiþá Tj ætti líka að rúlla til baka. Ef á sama tíma Tj hefur þegar verið framið, þá er um að ræða brot á stöðugleikareglunni.

Ein af lausnunum við fallandi afturköllun. Færsla lýkur öllum skrifaðgerðum í lokin og aðrar færslur verða að bíða eftir að þeirri aðgerð ljúki. Viðskipti bíða eftir að vera framin áður en þau eru lesin.

Thomas skrifaregla - afbrigði af tímastimplaaðferðinni þar sem bannað er að skrifa yfir gögn sem eru uppfærð af yngri færslu af eldri

Viðskipti T óskar eftir gagnabreytingum Q. Ef TS(T) < W-TS(Q), þ.e. færslan reynir að skrifa yfir nýrra gildi, færslu T er ekki snúið til baka eins og í tímastimplaaðferðinni.

Heimild: www.habr.com

Bæta við athugasemd