Sveiki visi. Vladislavas Rodinas susisiekia. Šiuo metu esu kurso vadovas didelio darbo krūvio architektų kursui OTUS, taip pat dėstau programinės įrangos architektūros kursus.
Be mokymo, kaip galbūt pastebėjote, aš rašau originalią medžiagą OTUS tinklaraščiui apie Habré ir noriu sutapti su šiandienos straipsniu, kad jis sutaptų su kurso pradžia
įvedimas
В
Izoliacija
Izoliacija išsprendžia prieigos prie duomenų konkurencinėje aplinkoje problemą, iš esmės užtikrindama apsaugą nuo lenktynių sąlygų. Idealiu atveju izoliacija reiškia serializavimą, kuris yra savybė, užtikrinanti, kad lygiagrečiai vykdomų operacijų rezultatas būtų toks pat, lyg jos būtų vykdomos nuosekliai. Pagrindinė šios savybės problema yra ta, kad ją labai sunku pateikti techniškai ir dėl to daro didelę įtaką sistemos veikimui. Štai kodėl izoliacija dažnai susilpnėja, prisiimant tam tikrų anomalijų riziką, kuri bus aptarta toliau. Tam tikrų anomalijų atsiradimo galimybė tiksliai apibūdina sandorio izoliacijos lygį.
Labiausiai žinomos anomalijos yra šios: purvinas skaitymas, nepakartojamas skaitymas, fantominis skaitymas, bet iš tikrųjų yra dar 5: purvinas rašymas, žymeklio atnaujinimas pamestas, atnaujinimas prarastas, skaitymo kreivumas, rašymo iškrypimas.
Nešvarus rašymas
Anomalijos esmė ta, kad operacijos gali perrašyti neįpareigotus duomenis.
Ši anomalija pavojinga ne tik dėl to, kad atlikus abi operacijas duomenys gali konfliktuoti (kaip paveikslėlyje), bet ir dėl to, kad pažeidžiamas atomiškumas: kadangi leidžiame perrašyti neįsipareigotus duomenis, neaišku, kaip atšaukti vieną operaciją nepažeidžiant kitos. .
Anomaliją galima gydyti gana paprastai: prieš pradėdami įrašymą prie įrašo pritvirtiname užraktą, uždraudžiame kitoms operacijoms keisti įrašą, kol užraktas nebus pašalintas.
Purvinas skaitymas
Nešvarus skaitymas reiškia neįsipareigotų duomenų skaitymą.
Problemos kyla tada, kai reikia imtis veiksmų ar priimti sprendimus remiantis imtimi.
Norėdami ištaisyti anomaliją, galite pritvirtinti skaitymo užraktą, tačiau tai labai paveiks našumą. Daug paprasčiau pasakyti, kad norint atšaukti operaciją, sistemoje turi būti išsaugota pradinė duomenų būsena (prieš įrašymo pradžią). Kodėl neskaitai iš ten? Tai pakankamai nebrangi, kad dauguma duomenų bazių pašalina nešvarų skaitymą pagal numatytuosius nustatymus.
Prarastas atnaujinimas
Prarastas naujinimas reiškia prarastus naujinimus, o vertimas gana tiksliai atspindi problemos esmę:
Tiesą sakant, sandorio T2 rezultatas buvo atšauktas. Šią situaciją galima ištaisyti naudojant tiesioginius arba numanomus rašymo užraktus. Tai yra, mes arba tiesiog atnaujiname įrašą, tada įvyksta numanomas užraktas, arba atliekame pasirinkite atnaujinimui, sukeldamas skaitymo ir rašymo užraktą. Atkreipkite dėmesį, kad tokia operacija yra gana pavojinga: savo „nekaltu“ skaitymu blokuojame kitus rodmenis. Kai kurios duomenų bazės siūlo saugesnę pasirinkite dalintis, leidžiančius duomenis skaityti, bet ne keisti.
Žymeklis prarado atnaujinimą
Tikslesniam valdymui duomenų bazės gali pasiūlyti kitus įrankius, pvz., žymeklį. Žymeklis yra struktūra, turinti eilučių rinkinį ir leidžianti jas kartoti. deklaruoti žymeklio_pavadinimą pasirinkimo_teiginiui. Žymeklio turinys aprašomas pasirinkimu.
Kodėl jums reikia žymeklio? Faktas yra tas, kad kai kurios duomenų bazės siūlo užrakinti visus įrašus, pasirinktus pasirinkus (skaitymo stabilumas), arba tik įrašą, kuriame šiuo metu yra žymeklis (žymeklio stabilumas). Naudojant žymeklio stabilumą, įdiegtas trumpas užraktas, kuris leidžia sumažinti užraktų skaičių, jei kartojame didelę duomenų pavyzdį. Todėl prarasta naujinimo anomalija žymekliui išskiriama atskirai.
Nepakartojamas skaitymas
Nepakartojamas skaitymas yra tai, kad mūsų operacijos metu 2 to paties įrašo nuskaitymai iš eilės duos skirtingus rezultatus, nes tarp šių dviejų nuskaitymų įsikišo kita operacija, pakeitė mūsų duomenis ir buvo įvykdyta.
Kodėl tai net problema? Įsivaizduokite, kad paveikslėlyje T2 operacijos tikslas yra atrinkti visas prekes, kurių kaina mažesnė nei 150 USD. Kažkas kitas atnaujino kainą iki 200 USD. Taigi sumontuotas filtras neveikė.
Šios anomalijos nustoja atsirasti, kai pridedami dviejų fazių blokavimai arba kai naudojamas MVCC mechanizmas, kurį norėčiau aptarti atskirai.
Fantominis skaitymas
„Phantom“ yra duomenų, pridėtų atliekant kitą operaciją, skaitymas.
Kaip pavyzdį galime pastebėti neteisingą pigiausios prekės pasirinkimą, kai atsiranda ši anomalija.
Atsikratyti fantominių skaitymų jau gana sunku. Reguliariai blokuoti neužtenka, nes negalime užblokuoti to, ko dar nėra. 2PL sistemos naudoja nuspėjamą užrakinimą, o MVCC sistemos turi operacijų planavimo priemonę, kuri atšaukia operacijas, kurias gali sutrikdyti įdėklas. Tiek pirmasis, tiek antrasis mechanizmai yra gana sunkūs.
Skaityti kreivai
Skaitymo iškrypimas atsiranda, kai dirbame su keliomis lentelėmis, kurių turinys turi nuosekliai keistis.
Tarkime, kad turime lenteles, vaizduojančias įrašus ir jų metainformaciją:
Viena operacija nuskaitoma iš lentelių, kita jas keičia:
Dėl operacijos T1 įrašo pavadinimas = geras, o atnaujintas_ = T2, o tai yra tam tikras neatitikimas.
Tiesą sakant, tai yra nepakartojamas skaitymas, bet kaip kelių lentelių dalis.
Norėdami tai ištaisyti, T1 gali užrakinti visas eilutes, kurias jis skaitys, o tai neleis T2 operacijai pakeisti informacijos. MVCC atveju T2 sandoris bus atšauktas. Apsauga nuo šios anomalijos gali tapti svarbia, jei naudosime žymeklius.
Rašyti kreivai
Šią anomaliją taip pat lengviau paaiškinti pavyzdžiu: tarkime, kad mūsų sistemoje turėtų budėti bent vienas gydytojas, tačiau abu gydytojai nusprendė atšaukti savo budėjimą:
Anomalija reiškė, kad nė vienas iš gydytojų nebudės. Kodėl taip atsitiko? Kadangi sandoryje buvo tikrinama sąlyga, kurią galėjo pažeisti kita operacija, ir dėl izoliacijos šio pakeitimo nepastebėjome.
Tai tas pats nepakartojamas skaitymas. Arba pasirinktinai gali užrakinti šiuos įrašus.
Rašymo pasvirimas ir skaitymo kreivumas yra ankstesnių anomalijų deriniai. Galite apsvarstyti rašymo pasvirimą, kuris iš esmės yra fantominis skaitymas. Apsvarstykite lentelę, kurioje yra darbuotojų vardai, jų atlyginimai ir projektas, su kuriuo jie dirba:
Dėl to gauname tokį vaizdą: kiekvienas vadovas manė, kad dėl jų pakeitimo nebus viršytas biudžetas, todėl jie atliko personalo pakeitimus, kurie kartu lėmė išlaidų viršijimą.
Problemos priežastis lygiai tokia pati kaip ir fantominio skaitymo.
išvados
Sandorių izoliacijos lygio sušvelninimas duomenų bazėje yra kompromisas tarp saugumo ir našumo; šio lygio pasirinkimas turėtų būti vertinamas atsižvelgiant į galimą riziką verslui, jei atsiranda tam tikrų anomalijų.
Šaltinis: www.habr.com