Moien alleguer. De Vladislav Rodin ass a Kontakt. Ech sinn de Moment de Cours Leader fir den High Workload Architect Cours bei OTUS an léieren och Software Architektur Coursen.
Nieft dem Unterrécht, wéi Dir vläicht gemierkt hutt, schreiwen ech originell Material fir den OTUS Blog op Habré an ech wëll mam Artikel vun haut zesummefalen fir mat der Start vum Cours zesummen ze kommen
Aféierung
В
Isolatioun
Isolatioun léist de Problem vun Zougang zu Daten an engem kompetitiven Ëmfeld, am Wesentlechen Schutz vu Rassbedéngungen. Idealerweis heescht Isolatioun Serialiséierung, wat eng Eegeschafte ass déi garantéiert datt d'Resultat vun der Ausféierung vun Transaktiounen parallel d'selwecht ass wéi wa se sequentiell ausgefouert goufen. D'Haaptproblem mat dëser Propriétéit ass, datt et ganz schwéier ass technesch ze bidden an, als Resultat, huet e wesentlechen Impakt op System Leeschtung. Dofir ass d'Isolatioun oft geschwächt, d'Risike vu bestëmmten Anomalien akzeptéieren, déi hei ënnen diskutéiert ginn. D'Méiglechkeet vu bestëmmte Anomalien präzis charakteriséiert den Niveau vun der Transaktiounsisolatioun.
Déi bekanntst Anomalie sinn: dreckeg liesen, net widderhuelend Liesen, Phantom Liesen, awer tatsächlech ginn et 5 méi: dreckeg Schreiwen, Cursor verluer Update, verluer Update, Liesschréiwen, Schreiwen Schreifweis.
Dreckeg schreiwen
D'Essenz vun der Anomalie ass datt Transaktiounen onengagéiert Donnéeën iwwerschreiwe kënnen.
Dës Anomalie ass geféierlech net nëmme well d'Donnéeën Konflikt kënne ginn nodeems se béid Transaktioune gemaach hunn (wéi an der Foto), awer och well d'Atomizitéit verletzt gëtt: well mir erlaben net engagéiert Donnéeën ze iwwerschreiwe, ass et net kloer wéi een eng Transaktioun zréckrollt ouni eng aner ze beaflossen .
D'Anomalie kann ganz einfach behandelt ginn: mir befestigen e Spär un de Rekord virum Start vun der Opnam, verbidden aner Transaktiounen de Rekord z'änneren bis d'Spär ewechgeholl gëtt.
Dreckeg liesen
Dreckeg liesen heescht net engagéiert Donnéeën liesen.
Probleemer entstinn wann Handlungen oder Entscheedunge musse gemaach ginn op Basis vun der Probe.
Fir d'Anomalie ze korrigéieren, kënnt Dir e Liesschloss befestigen, awer dëst wäert d'Leeschtung staark beaflossen. Et ass vill méi einfach ze soen datt fir e Réckgang vun enger Transaktioun den initialen Zoustand vun den Donnéeën (virum Start vun der Opnam) am System gespäichert muss ginn. Firwat net vun do liesen? Et ass preiswert genuch datt déi meescht Datenbanken dreckeg liesen par défaut ewechhuelen.
Verluer Update
Verluer Aktualiséierung bedeit verluer Updates, an d'Iwwersetzung reflektéiert ganz präzis d'Essenz vum Problem:
Tatsächlech gouf d'Resultat vun der Transaktioun T2 ëmgedréit. Dës Situatioun kann duerch explizit oder implizit Schreifschloss korrigéiert ginn. Dat ass, mir aktualiséieren entweder einfach de Rekord, an da geschitt eng implizit Spär, oder mir maachen wielt fir Update, wouduerch e Lies- a Schreifschloss geschitt. Notéiert w.e.g. datt esou eng Operatioun zimlech geféierlech ass: mat eiser "onschëlleger" Liesung blockéiere mir aner Liesungen. E puer Datenbanken bidden méi sécher wielt fir deelen, erlaabt datt d'Donnéeë gelies ginn, awer net geännert ginn.
Cursor verluer Update
Fir méi fein Kontroll kënnen d'Basen aner Tools ubidden, sou wéi e Cursor. E Cursor ass eng Struktur déi e Set vu Reihen enthält an Iech erlaabt iwwer si ze iteréieren. erklären cursor_name fir select_statement. D'Inhalter vum Cursor ginn duerch Auswiel beschriwwen.
Firwat braucht Dir e Cursor? D'Tatsaach ass, datt e puer Datenbanken e Spär bidden op all records ausgewielt duerch wielt (liesen Stabilitéit), oder nëmmen op de Rekord op deem de Cursor am Moment läit (Cursor Stabilitéit). Mat Cursorstabilitéit gëtt kuerz Spär ëmgesat, wat eis erlaabt d'Zuel vun de Spären ze reduzéieren wa mir iwwer eng grouss Probe vun Daten iteréieren. Dofir gëtt déi verluerene Update-Anomalie separat fir de Cursor isoléiert.
Net widderhuelend liesen
Net widderhuelend Liesung ass datt während der Ausféierung vun eiser Transaktioun 2 konsekutiv Liesungen vum selwechte Rekord zu verschiddene Resultater féieren, well eng aner Transaktioun tëscht dësen zwou Liesungen intervenéiert, eis Donnéeën geännert huet a sech engagéiert huet.
Firwat ass dëst iwwerhaapt e Problem? Stellt Iech vir, datt d'Zil vun der Transaktioun T2 am Bild ass fir all Wueren ze wielen, deenen hire Präis manner wéi 150 USD ass. Een aneren huet de Präis op $200 aktualiséiert. Also huet den installéierten Filter net geschafft.
Dës Anomalien ophalen ze geschéien wann zwee-Phase interlocks dobäi ginn oder wann de MVCC Mechanismus benotzt gëtt, déi ech gären getrennt diskutéieren.
Phantom liesen
Phantom ass eng Liesung vun Daten déi vun enger anerer Transaktioun bäigefüügt goufen.
Als Beispill kënne mir déi falsch Auswiel vum bëllegste Produkt beobachten wann dës Anomalie geschitt.
D'Phantomliesen lass ze ginn ass scho relativ schwéier. Regelméisseg Spären geet net duer, well mir kënnen net eppes blockéieren wat et nach net gëtt. 2PL Systemer benotzen prediktiv Sperrung, während MVCC Systemer en Transaktiounsplaner hunn, deen Transaktiounen zréckrullt, déi vun engem Insert gestéiert kënne ginn. Souwuel déi éischt an zweet Mechanismen sinn zimlech schwéier.
Schief liesen
Liesen Skew geschitt wa mir mat verschiddenen Dëscher schaffen, den Inhalt vun deenen muss konsequent änneren.
Loosst eis soen datt mir Tabellen hunn déi Posts an hir Metainformatioun representéieren:
Eng Transaktioun liest aus den Dëscher, déi aner ännert se:
Als Resultat vun der Transaktioun T1 huet d'Post Titel = Gutt, an updated_by = T2, wat eng Zort Inkonsistenz ass.
Tatsächlech ass dëst eng net widderhuelend Liesung, awer als Deel vu verschiddenen Dëscher.
Fir dëst ze fixéieren, kann T1 Spären op all Zeilen setzen, déi se liesen, wat d'Transaktioun T2 verhënnert datt d'Informatioun geännert gëtt. Am Fall vun MVCC gëtt d'T2 Transaktioun annuléiert. Schutz géint dës Anomalie ka wichteg ginn wa mir Cursoren benotzen.
Schreiwen Schreifweis
Dës Anomalie ass och méi einfach mat engem Beispill z'erklären: ugeholl datt an eisem System op d'mannst een Dokter op der Pflicht soll sinn, awer béid Dokteren hunn decidéiert hir Pflicht ze annuléieren:
D'Anomalie huet gemengt, datt keen vun den Dokteren am Asaz wier. Firwat ass dat geschitt? Well d'Transaktioun eng Konditioun kontrolléiert, déi duerch eng aner Transaktioun verletzt ka ginn, a wéinst der Isolatioun hu mir dës Ännerung net gesinn.
Dëst ass déiselwecht net widderhuelend Liesung. Alternativ, wielt kann Spären op dës records Plaz.
Schreiwen a Liesen Schréiegt sinn Kombinatioune vun de fréiere Anomalien. Dir kënnt Schreifweis berécksiichtegen, wat am Fong eng Phantom Liesung ass. Betruecht eng Tabell déi d'Nimm vun de Mataarbechter enthält, hir Gehälter, an de Projet un deem se schaffen:
Als Resultat kréie mir folgend Bild: All Manager huet geduecht datt hir Ännerung net zum Budget iwwergoe géif, sou datt si Personalännerungen gemaach hunn, déi zesummen zu Käschteiwwerschëss gefouert hunn.
D'Ursaach vum Problem ass genau d'selwecht wéi am Phantom Liesen.
Conclusiounen
D'Entspanung vum Transaktiounsisolatiounsniveau an der Datebank ass en Ofwiesselung tëscht Sécherheet a Leeschtung; d'Wiel vun dësem Niveau soll op Basis vun de potenzielle Risiken fir d'Geschäft ugeholl ginn wa verschidde Anomalien optrieden.
Source: will.com