COMPUTERWORLD
pod kapotou
Vlastnosti ACID

Ji₧ v dobßch rannΘ historie databßzφ v 70. letech bylo krΘdem databßzov²ch systΘm∙, aby transakce nad jednou databßzφ mohly b²t v u₧ivatelsk²ch aplikaΦnφch programech provßd∞ny paraleln∞. Cφlem bylo lΘpe vyu₧φt spoluprßci r∙zn²ch za°φzenφ, jako jsou nap°. procesor a periferie. Uva₧ujme 2 transakce s operacemi Tij. P°edpoklßdejme transakce T1 a T2 danΘ posloupnostmi operacφ {T11,...,T1n}, resp. {T21,...,T2m}. StanovenΘ po°adφ provßd∞nφ operacφ vφce transakcφ v Φase nazveme rozvrhem. Obrßzek 1 ukazuje n∞kolik mo₧nostφ, v jakΘm po°adφ provßd∞t danΘ operace. VÜimn∞te si r∙zn²ch Φas∙ ukonΦenφ transakcφ, kterΘ nejsou ve stejnΘm po°adφ jako zaΦßtky transakcφ; to je zp∙sobeno tφm, ₧e skuteΦn² p°enos dat na disk probφhal s jist²m zpo₧d∞nφm v zßvislosti na modulu °φzenφ soubor∙.

╚as

1. mo₧nost

T11 ... T1n T21 ... T2m

2. mo₧nost

T21 .. . T2m T11 ... T1n

3. mo₧nost

T21... T11 ... T2k ... T1l ...

Obr. 1 Rozvrhy pro provedenφ transakcφ

Pro charakterizaci r∙zn²ch p°φstup∙ k ke transakcφm je vhodnΘ zavΘst pojem transakΦnφho modelu. TransakΦnφ model je obvykle charakterizovßn strukturou transakce a strukturou objekt∙, na kter²ch transakce operuje. Na zßklad∞ transakΦnφho modelu lze definovat jistß kritΘria korektnosti, kterß nap°. umo₧nφ rozliÜit ôdobrΘö rozvrhy od ôÜpatn²chö rozvrh∙. Zatφm intuitivn∞ se p°edstavme problΘm na p°φkladu, kdy jedna transakce v rezervaΦnφm systΘmu Φte data o poΦtu rezervacφ, p°esto₧e jinß transakce je zrovna m∞nφ. Pak je nekorektnost v tom, ₧e jedna transakce pou₧φvß starß data, p°esto₧e existujφ novß (ale nepotvrzenß k pou₧itφ ostatnφmi u₧ivateli systΘmu).

Struktura objekt∙

Objekty, na kter²ch operuje transakce jsou (podle zvyÜujφcφ se slo₧itosti) bu∩ jednoduchΘ objekty jako soubory, strßnky, zßznamy, nebo objekty jako instance abstraktnφch datov²ch typ∙ (ADT), slo₧itΘ objekty (jak je dnes nabφzφ nap°. objektov∞ orientovan² p°φstup), a koneΦn∞ tzv. aktivnφ objekty.

SouΦasnΘ systΘmy pro zpracovßnφ transakcφ (SZT) pracujφ hlavn∞ s jednoduch²mi objekty, v∞tÜinou s fyzick²mi strßnkami. Pou₧itφ zßznamu (n-tice) jako jednotky zpracovßnφ ji₧ m∙₧e vΘst k vysokΘ re₧ii. PodstatnΘ na tomto druhu objekt∙ je, ₧e se nebere v ·vahu jejich sΘmantika. Aktualizace strßnky je nap°. uva₧ovßna bez ohledu na to, jak² logick² objekt se na nφ nachßzφ.

Pou₧itφ ADT znamenß pou₧itφ abstraktnφch operacφ svßzan²ch s objekty. Nejde o pouhΘ operace READ a WRITE. Takov²mi ôvyÜÜφmiö operacemi mohou b²t nap°. INSERT, DELETE UPDATE v SQL, tj. nad relacemi, co₧ vede k vφce·rov≥ov²m mechanism∙m zpracovßnφ transakcφ. INSERT n-tice do relace znamenß jistou aktualizaci fyzickΘ strßnky. KritΘria korektnosti musφ b²t aplikovßna na ka₧dΘ ·rovni zvlßÜ¥.

Slo₧itΘ objekty objektov∞ orientovan²ch S╪BD p°edstavujφ objekty se strukturou, jejφ₧ komponentou m∙₧e b²t op∞t objekt. To vede k tomu, ₧e transakce na objektu m∙₧e vyvolat implicitnφ hnφzd∞nφ transakcφ, tj. volßnφ transakcφ na podobjektech.

Aktivnφ (a pasivnφ) objekty pat°φ tzv. aktivnφm databßzφm. V t∞chto databßzφch se monitorujφ udßlosti a popisujφ podmφnky, za kter²ch dochßzφ ke spouÜt∞nφ jist²ch akcφ p°i v²skytu takov²ch udßlostφ. Volßnφ akce znamenß volßnφ jistΘ (hnφzd∞nΘ) transakce.

Struktura transakce

P°es problematickΘ otßzky, jak v∙bec klasifikovat p°φstupy k modelovßnφ transakcφ, rozliÜujφ se dnes Φty°i kategorie transakcφ podle zvyÜujφcφ se slo₧itosti. Jednß se o tzv. plochΘ transakce, uzav°enΘ hnφzd∞nΘ transakce, otev°enΘ hnφzd∞nΘ transakce a pracovnφ toky (workflows). Uvß₧φme 4 mo₧nosti struktury objekt∙, obdr₧φme 16 mo₧nostφ - kategoriφ transakΦnφch model∙, z nich₧ n∞kterΘ jeÜt∞ nebyly ani v praxi ani v teorii zkoumßny.

PlochΘ transakce spl²vajφ vlastn∞ s p∙vodnφm pojmem transakce, tak jak byl vyvinut v polovin∞ 70. let. Tyto transakce majφ jednoduch² bod startu (Begin_transaction) a jednoduch² bod ukonΦenφ (End_transaction). V∞tÜina SZT v databßzφch se v minulosti zam∞°ovala prßv∞ na tento model pou₧it² na jednoduch²ch objektech. Tyto systΘmy pou₧φvajφ v∞tÜinou za kritΘrium korektnosti uspo°ßdatelnost rozvrh∙ (bude tΘmatem samostatnΘho dφlu DatabßzovΘ abecedy).

Hnφzd∞nΘ transakce zahrnujφ dalÜφ transakce se sv²mi body startu a ukonΦenφ. P°φkladem takovΘ transakce m∙₧e b²t objednßvka rezervace prost°edk∙ pro slu₧ebnφ cestu, zahrnujφcφ jednak rezervaci letenky, dßle hotelu, ale i pronßjmu auta po dobu pobytu v hotelu. RozliÜujφ se uzav°enΘ a otev°enΘ hnφzd∞nΘ transakce. Uzav°enΘ odpovφdajφ klasickΘmu zpracovßnφ transakcφ v distribuovan²ch systΘmech. Potvrzovßnφ podtransakcφ se d∞je zdola-nahoru, tj. sΘmantika podtransakcφ p°ispφvß k atomicit∞ ko°enovΘ transakce. Pro tyto modely existujφ mnohdy kritΘria korektnosti, kterß umo₧≥ujφ poskytnout i ΦßsteΦnΘ v²sledky jin²m transakcφm.

Otev°enΘ hnφzd∞nφ uvol≥uje po₧adavek na atomicitu ko°enovΘ transakce. ╚ßsteΦnΘ v²sledky mohou b²t viditelnΘ mimo transakci, kterß je po°izuje. Tak nap°. sßga je posloupnost transakcφ, kterΘ mohou b²t prolo₧eny jin²mi transakcemi. S╪BD zajiÜ¥uje, ₧e vÜechny transakce v sßze jsou provedeny nebo se rozb∞hnou kompenzujφcφ transakce pro zotavenφ. Dovoleny jsou pouze dv∞ ·rovn∞ hnφzd∞nφ a na vn∞jÜφ ·rovni nenφ podporovßna atomicita. Navφc, podtransakce tvo°φcφ sßgu musφ b²t provedeny sekvenΦn∞.

Dnes z°ejm∞ nejv∞tÜφm problΘmem SZT jsou tzv. dlouhotrvajφcφ transakce. P∙vodnφ pojem transakce vyvinut² krßtk²ch bankovnφch operacφch (p°enosy z ·Φtu na ·Φet, jednoduchΘ aktualizace) ji₧ pro n∞kterΘ aplikace nestaΦφ. P°edstavme si cestovnφ agenturu a ji₧ zmφn∞nou transakci - zajiÜ¥ovßnφ prost°edk∙ pro slu₧ebnφ cestu zßkaznφka. Nap°. po zajiÜt∞nφ letenky, je nutnΘ vstoupit do r∙zn²ch externφch databßzφ hotel∙, p°φpadn∞ p∙jΦoven aut. TakΘ zφskßnφ dφlΦφ letenky m∙₧e ovlivnit ji₧ provedenou rezervaci p°edchozφ letenky, tj. jejφ zruÜenφ. ZajiÜt∞nφ kompletnφ transakce m∙₧e b²t dlouhodobΘ, transakΦnφ mechanismus musφ odrß₧et typickΘ zp∙soby, jak²mi je provßd∞n obchod v praxi. Projektovßnφ takov²chto transakcφ a jejich implementace vedly k pojmu pracovnφch tok∙ a systΘm∙ °φzenφ pracovnφch tok∙. Pracovnφ toky jsou modelovßny pomocφ aktivit, ·kol∙, z hlediska transakΦnφho zpracovßnφ pomocφ uzav°en²ch transakcφ. Pojem transakce v t∞chto systΘmech doznal znaΦn²ch zm∞n a zobecn∞nφ.

Uva₧ujme podrobn∞ji p°φpad, kdy struktura transakce je plochß, p°iΦem₧ objekty budou ty nejjednoduÜÜφ mo₧nΘ, tj. nep∙jde ani o °ßdky relacφ, n²br₧ o atributy (polo₧ky), bez ohledu na to, jak jsou ve skuteΦnosti implementovßny. Pou₧φvan²mi operacemi budou:

  • READ(X,x) - p°i°azuje hodnotu atributu X lokßlnφ prom∞nnΘ x. Operace se sklßdß ze dvou fßzφ - nenφ-li objekt s danou hodnotou ve vyrovnßvacφ pam∞ti, provede se FETCH(X), nßsleduje p°i°azenφ hodnoty X z vyrovnßvacφ pam∞ti prom∞nnΘ x.
  • WRITE(X,x) - p°i°azuje hodnotu lokßlnφ prom∞nnΘ x atributu X ve vyrovnßvacφ pam∞ti. Operace mß op∞t dv∞ fßze - nenφ-li pot°ebn² objekt ve vyrovnßvacφ pam∞ti, provede se FETCH(X), nßsleduje p°i°azenφ prom∞nnΘ x atributu X ve vyrovnßvacφ pam∞ti.

Nezßle₧φ-li na pou₧it²ch prom∞nn²ch, budeme psßt READ(X) a WRITE(X).

VÜimn∞me si, ₧e operace OUTPUT(X) se v t∞chto operacφch neuva₧uje. Neprovßdφ se toti₧ bezprost°edn∞ po provedenφ WRITE. Z toho plyne, zhroutφ-li se systΘm po WRITE(X) p°ed provedenφm OUTPUT(X), je novß hodnota X ztracena.

V souvislosti s pojmem transakce se obvykle hovo°φ o vlastnostech ACID. Jde o prvnφ pφsmena angl. slov atomicity, consistency, independence (nebo isolation) a durability. Transakce spl≥ujφcφ vlastnosti ACID, musφ spl≥ovat Φty°i dφlΦφ vlastnosti:

  • atomicita - transakce se tvß°φ jako jeden celek, musφ bu∩ prob∞hnout celß nebo v∙bec ne,
  • konzistence - transakce transformuje databßzi z jednoho konzistentnφho stavu do jinΘho konzistentnφho stavu,
  • nezßvislost - transakce jsou nezßvislΘ, tj. dφlΦφ efekty transakce nejsou viditelnΘ jin²m transakcφm,
  • trvanlivost - efekty ·sp∞Ün∞ ukonΦenΘ (potvrzenΘ) transakce jsou ulo₧eny do databßze (tΘto vlastnosti takΘ se °φkß persistence).

Podle Haerdera a Reutera z r. 1983 tyto vlastnosti p°edstavujφ zßkladnφ princip v transakΦnφm zpracovßnφ. N∞kdy se takΘ hovo°φ a testu ACID pro transakce. Jde ovÜem o vlastnosti, kterΘ nejsou nezßvislΘ.

Atomicita, jak jsme vid∞li, znamenß bu∩ vÜechno nebo nic. Transakce buduje v∞tÜφ jednotku zpracovßnφ z menÜφch atomick²ch operacφ. ┌dr₧ba atomicity transakce se naz²vß zotavenφ z chyb. Jednß se nap°. o vydßnφ p°φkazu RALLBACK po chyb∞ dat, po uvßznutφ apod., nebo provedenφ jist²ch akcφ po chyb∞ systΘmu.

Existuje konzistence individußlnφch transakcφ (viz pojmem transakce) a konzistence databßze pod paralelnφm volßnφm transakcφ. V prvnφm p°φpad∞ pova₧uje SZT transakci za konzistentnφ a spolΘhß na kontrolu integritnφch omezenφ, kterß jsou zajiÜ¥ovßna jistou Φßstφ S╪BD. V druhΘm p°φpad∞ pou₧φvß kritΘria korektnosti (protokoly), kterß jsou obsa₧ena v algoritmech provßd∞jφcφch paralelnφ zpracovßnφ.

Nezßvislost Φi izolace je vlastnost transakcφ, kterß po₧aduje, aby transakce v₧dy vid∞la konzistentnφ databßzi. Jin²mi slovy °eΦeno, b∞₧φcφ transakce nem∙₧e zjevit svΘ v²sledky ostatnφm transakcφm, pokud je nepotvrdφ.

DalÜφm d∙vodem pro izolaci souvisφ s tzv. dominov²m efektem. ProblΘmy s paralelnφm provßd∞nφm transakcφ je v reßln²ch systΘmech toti₧ nutnΘ kombinovat s problΘmy t²kajφcφmi se zotavenφ z chyb. ╪eÜφ se otßzka, kterΘ transakce provßd∞t znovu v p°φpad∞ jejich vzßjemnΘ zßvislostφ podle sdφlen²ch objekt∙. Nap°. transakce T, U, V pracujφ paraleln∞ na objektu Q, p°iΦem₧ T m∞nφ tento objekt. Dostane-li se transakce T do chybnΘho stavu a je zruÜena, musφ b²t zruÜeny i transakce U a V (m∞ly p°eΦtenou nesprßvnou hodnotu objektu Q). Tomuto jevu se °φkß kaskßdovΘ ruÜenφ transakcφ nebo tΘ₧ dominov² efekt. Je z°ejmΘ, ₧e pojem izolace je p°φmo vzta₧en ke konzistenci databßze a tedy k paralelnφmu zpracovßnφ.

Trvanlivost znamenß, ₧e jakmile transakce vydß potvrzenφ v²sledk∙, pak v²sledky jsou trvalΘ a nemohou b²t vymazßny z databßze, tj. je dosa₧ena atomicita vzhledem k chybßm.

Postupem doby se ACID vlastnosti vyvφjely, proto₧e se (zvlßÜt∞ v souvislosti s nov²mi aplikacemi databßzovΘ technologie) ukßzaly pon∞kud omezujφcφ. Modernφ p°φstupy ke transakcφm vlastn∞ znamenajφ jistΘ uvol≥ovßnφ omezenφ, kterΘ ACID vlastnosti implikujφ ve prosp∞ch pru₧n∞jÜφho provozu transakcφ.



<seznam dφl∙ serißlu>   <COMPUTERWORLD>