Transakce v reálném světě

Školení, která pořádám

U některých operací v reálném světě bych docela uvítal, když by probíhaly v transakci:

A tak dále, další příklady vás jistě napadnou samotné. Co by transakce vlastně měla splňovat?

Atomicita
Provede se buď všechno, nebo nic. Pokud třeba nanejdeme nový sáček na smetí, tak v koši raději zůstane ten plný.
Konzistence
Po dokončení systém zůstane neporušen. Tedy nový pytlík v koši nebude děravý.
Izolovanost
Není vidět mezistav. To znamená, že se nikdo nesetká se situací, kdy by v koši nebyl žádný pytlík. Dá se to vyřešit čekáním.
Trvalost
Změny se neztratí. Tedy když nám systém (např. spolubydlící) řekne, že operace je dokončena, tak už o ni nepřijdeme.

V reálném světě ale bohužel většina lidí pracuje v autocommit režimu…

Příště si povíme něco o reportování chyb a zotavování z nich, které bych v reálném světě také trochu poupravil.

Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.

Jakub Vrána, Seznámení s oblastí, 21.9.2011, diskuse: 5 (nové: 0)

Diskuse

ikona v6ak:

Takže, mám seznam pěti věcí na nákup. Poslední nekoupím. Mám ty čtyři vrátit?

ikona Jakub Vrána OpenID:

Ne. Do transakce bych uzavřel smazání každé položky z nákupního seznamu a její koupení. Takže když poslední nekoupíš, tak ji necháš na seznamu. Občas je vhodné do transakce sdružit položek více (např. rajčata, mozarella a bazalka), ale obvykle to není potřeba.

S.:

Kéž by v reálném světě existoval rollback....

Michal:

Však existuje. Není přece nic jednoduššího než po zjištění že nemám nový pytlík na odpadky dojít do popelnice pro ten starý, plný, vyhozený a přinést ho zpátky domů!

Franta:

Spíš jde o to, že některé věci jsou nevratné a u jiných si vzpomeneš až po „commitu“.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.