Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Hæ allir. Vladislav Rodin hefur samband. Ég er sem stendur námskeiðsstjóri fyrir námskeiðið High Workload Architect hjá OTUS og kenni einnig námskeið í hugbúnaðararkitektúr.

Til viðbótar við kennslu, eins og þú hefur kannski tekið eftir, er ég að skrifa frumsamið efni fyrir OTUS bloggið á Habré og ég vil samhliða greininni í dag samhliða setningu námskeiðsins "PostgreSQL", sem er opið fyrir skráningu núna.

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Inngangur

В síðasta sinn við ræddum þá staðreynd að viðskipti í gagnagrunnum eru til þess fallin að leysa tvö vandamál: að tryggja bilanaþol og aðgang að gögnum í samkeppnisumhverfi. Til að framkvæma þessi verkefni að fullu verður færslan að hafa Sýru eiginleika. Í dag munum við tala ítarlega um bréfið ég (einangrun) í þessari skammstöfun.

Einangrun

Einangrun leysir vandamálið við að fá aðgang að gögnum í samkeppnisumhverfi, sem veitir í raun vernd gegn keppnisaðstæðum. Helst þýðir einangrun raðgreining, sem er eiginleiki sem tryggir að niðurstaðan af því að framkvæma viðskipti samhliða sé sú sama og ef þau væru framkvæmd í röð. Helsta vandamálið við þessa eign er að það er mjög erfitt að veita tæknilega og hefur þar af leiðandi veruleg áhrif á afköst kerfisins. Þess vegna er einangrun oft veikt, viðurkennd áhættuna af ákveðnum frávikum, sem fjallað verður um hér á eftir. Möguleikinn á að ákveðin frávik eigi sér stað einkennir nákvæmlega hversu einangruð viðskipti eru.

Þekktustu frávikin eru: óhreinn lestur, óendurtekin lestur, fantómlestur, en í raun eru það 5 í viðbót: óhreint skrif, bendill týnd uppfærsla, týnd uppfærsla, lestur skekktur, skrifskekktur.

Skítt skrif

Kjarninn í frávikinu er að viðskipti geta skrifað yfir óbundin gögn.

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Þetta frávik er hættulegt, ekki aðeins vegna þess að gögn geta stangast á eftir að hafa framkvæmt báðar færslurnar (eins og á myndinni), heldur einnig vegna þess að brotið er gegn atomicity: þar sem við leyfum að skrifa yfir óbundin gögn, er ekki ljóst hvernig á að afturkalla eina færslu án þess að hafa áhrif á aðra .

Hægt er að meðhöndla frávikið á einfaldan hátt: við festum lás við skrána áður en upptakan er hafin, bönnum öðrum viðskiptum að breyta skránni þar til læsingin er fjarlægð.

Óhrein lesning

Óhreinn lestur þýðir að lesa óbundin gögn.

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Vandamál koma upp þegar taka þarf aðgerðir eða ákvarðanir út frá úrtakinu.

Til að leiðrétta frávikið geturðu fest leslás, en það mun hafa mikil áhrif á frammistöðu. Það er miklu einfaldara að segja að fyrir afturköllun færslu þarf að vista upphafsstöðu gagna (áður en skráning hefst) í kerfinu. Af hverju ekki að lesa þaðan? Það er nógu ódýrt að flestir gagnagrunnar fjarlægja óhreinan lestur sjálfgefið.

Týnd uppfærsla

Týnd uppfærsla þýðir glataðar uppfærslur og þýðingin endurspeglar alveg nákvæmlega kjarna vandamálsins:

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Í raun var niðurstaða viðskipta T2 snúið við. Þetta ástand er hægt að leiðrétta með skýrum eða óbeinum skriflásum. Það er, annaðhvort uppfærum við skrána og þá kemur óbein læsing fram, eða við framkvæmum veldu fyrir uppfærslu, sem veldur því að les- og skrifalæsing verður. Vinsamlegast athugaðu að slík aðgerð er mjög hættuleg: með „saklausum“ lestri okkar lokum við á aðra lestur. Sumir gagnagrunnar bjóða upp á öruggari veldu til að deila, sem gerir kleift að lesa gögn en ekki breyta þeim.

Bendill tapaði uppfærslu

Til að fá fínni stjórn, geta bækistöðvar boðið upp á önnur verkfæri, svo sem bendil. Bendill er uppbygging sem inniheldur sett af línum og gerir þér kleift að endurtaka yfir þær. lýstu bendil_heiti fyrir select_statement. Innihaldi bendilsins er lýst með því að velja.

Af hverju þarftu bendil? Staðreyndin er sú að sumir gagnagrunnar bjóða upp á lás á allar færslur sem valdar eru með vali (lestur stöðugleiki), eða aðeins á færslunni sem bendillinn er staðsettur á (stöðugleiki bendils). Með stöðugleika bendilsins er stutt læsing útfærð, sem gerir okkur kleift að fækka læsingum ef við endurteknum yfir stórt sýnishorn af gögnum. Þess vegna er tapaða uppfærslufrávikið einangrað sérstaklega fyrir bendilinn.

Óendurtekinn lestur

Óendurtekinn lestur er að við framkvæmd viðskipta okkar munu 2 samfelldar lestur af sömu skrá leiða til mismunandi niðurstaðna, vegna þess að önnur viðskipti gripu inn á milli þessara tveggja lestra, breytti gögnum okkar og var framið.

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Af hverju er þetta jafnvel vandamál? Ímyndaðu þér að markmið viðskipta T2 á myndinni sé að velja allar vörur sem hafa verð minna en 150 USD. Einhver annar uppfærði verðið í $200. Þannig virkaði uppsett sía ekki.

Þessar frávik hætta að eiga sér stað þegar tveggja fasa samlæsingum er bætt við eða þegar MVCC vélbúnaðurinn er notaður, sem mig langar að ræða sérstaklega.

Phantom lesið

Phantom er lestur á gögnum sem var bætt við með annarri færslu.

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Sem dæmi getum við fylgst með rangu vali á ódýrustu vörunni þegar þessi frávik eiga sér stað.

Það er nú þegar frekar erfitt að losna við fantómalestur. Regluleg lokun er ekki nóg, því við getum ekki lokað á eitthvað sem er ekki enn til. 2PL kerfi nota forspárlæsingu, á meðan MVCC kerfi eru með færsluáætlun sem afturkallar viðskipti sem gætu truflast af innskoti. Bæði fyrsta og annað vélbúnaðurinn er nokkuð þungur.

Lestu skekkju

Lesskekktur á sér stað þegar við vinnum með nokkrar töflur, innihald þeirra verður að breytast stöðugt.

Segjum að við höfum töflur sem tákna færslur og metaupplýsingar þeirra:

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Ein færslan les úr töflunum, hin breytir þeim:

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Sem afleiðing af færslu T1 hefur færslan titil = Gott og uppfært_eftir = T2, sem er einhvers konar ósamræmi.

Reyndar er þetta lesning sem ekki er hægt að endurtaka, heldur sem hluti af nokkrum töflum.

Til að laga þetta getur T1 sett læsingar á allar línur sem það mun lesa, sem kemur í veg fyrir að viðskipti T2 breyti upplýsingum. Ef um MVCC er að ræða verður T2 viðskiptin hætt. Vörn gegn þessu fráviki getur orðið mikilvæg ef við notum bendilinn.

Skrifaðu skekkt

Þetta frávik er líka auðveldara að útskýra með dæmi: Segjum sem svo að í kerfinu okkar ætti að minnsta kosti einn læknir að vera á vakt, en báðir læknarnir ákváðu að hætta við skyldu sína:

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Frávikið varð til þess að enginn læknanna væri á vakt. Hvers vegna gerðist þetta? Vegna þess að viðskiptin voru að athuga ástand sem gæti verið brotið með öðrum viðskiptum og vegna einangrunar sáum við ekki þessa breytingu.

Þetta er sama lesning sem ekki er hægt að endurtaka. Að öðrum kosti getur valið sett læsingar á þessar færslur.

Skrifa skekkt og les skew eru samsetningar af fyrri frávikum. Þú getur íhugað að skrifa skekkt, sem er í raun draugalesning. Skoðum töflu sem inniheldur nöfn starfsmanna, laun þeirra og verkefnið sem þeir vinna að:

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Hvað getur leitt af því að veikja einangrunarstig viðskipta í gagnagrunnum?

Fyrir vikið fáum við eftirfarandi mynd: hver stjórnandi taldi að breyting þeirra myndi ekki leiða til þess að fara yfir fjárhagsáætlun, svo þeir gerðu starfsmannabreytingar sem saman leiddu til umframkostnaðar.

Orsök vandans er nákvæmlega sú sama og í draugalestri.

Niðurstöður

Að slaka á einangrunarstigi viðskipta í gagnagrunninum er skipting milli öryggis og frammistöðu; nálgast ætti val á þessu stigi út frá hugsanlegri áhættu fyrir fyrirtækið ef ákveðin frávik eiga sér stað.

Frekari upplýsingar um námskeiðið.

Heimild: www.habr.com

Bæta við athugasemd