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:
- Vynesení smetí a vložení nového sáčku
- Vyprání osušky a pověšení čisté
- Vypotřebování toaletního papíru a instalace nového
- Sebrání nákupního seznamu a nákup (to je obzvlášť zákeřné)
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.
Diskuse
Takže, mám seznam pěti věcí na nákup. Poslední nekoupím. Mám ty čtyři vrátit?
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ů!
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.