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
Inngangur
В
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.
Þ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.
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:
Í 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ð.
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.
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:
Ein færslan les úr töflunum, hin breytir þeim:
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:
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ð:
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ð.
Heimild: www.habr.com