Tema: Re: transakcijos
Autorius: 2x50
Data: 2011-11-23 09:55:57
Pirmas sakinys is wiki yra "In computer science, ACID (atomicity, 
consistency, isolation, durability) is a set of properties that guarantee 
database transactions are processed reliably." Esminis zodis sitam sakiny 
yra reliably, t.y. bet kuri DBVS, kur yra imanomas duomenu redagavimas, 
privalo uztikrinti tai, kad duomenys be transakcijos nebutu redaguojami 
niekada (be isimciu!), taigi "Ar galima situacija, kad be tranzakcijos 
kažkas bus sugadinta?" - normaliomis aplinkybemis ne, normalios aplinkybes = 
naudojant DML (insert, update, delete) duomenu redagavimui. Nenormaliomis 
aplinkybemis, zinoma, galima viska sugadinti, bet tam jau reiktu naudoti DDL 
(pvz. alter / drop table nera transakcija ir tokios operacijos rezultatas 
negali buti atsauktas). "Ar tuo rūpinasi pati DB?" - taip, kitaip db, kuri 
tuo nesirupina, neturetu buti naudojama duomenu redagavimui. Toks principas 
yra realizuotas net failinese sistemose, kur 2 vartotojai negali redaguoti 
to paties failo vienu metu.

> Mane labiau domina kelių vartotojų darbas su DB tuo pačiu metu.
Na cia platesne tema nei tiesiog transakcijos, kadangi DBVS uztikrina, kad 
db yra stabili bet kuriuo laiko momentu, sakykim taip, fiziniam lygyje, bet 
tai nereiskia, kad 2 vartotojai negali pakeisti tu paciu duomenu net 
nezinodami vienas apie kita. DBVS tiesiog uztikrins, kad tie pakeitimai butu 
ivykdyti tam tikra tvarka ir tik vienas po kito.
Tarkim turim toki scenariju:
1. vartotojas A vykdo update orders set quantity = quantity + 10 where 
order_id = 1
2. tuo paciu metu vartotojas B vykdo update orders set quantity = quantity + 
10 where order_id = 1 (bando redaguoti ta pacia eilute kaip ir A)
Kaip elgsis DBVS? Ji prades transakcija A ir uztikrins, kad transakcija B 
butu pradeta tik po to, kai uzsibaigs transakcija A (commit arba rollback). 
Jei del kazkokiu priezasciu transakcija A pakibs, transakcija B taip pat 
kabes, kol nebus uzbaigta transakcija A.Tai yra viskas, ka daro DBVS.
Paprastai to neuztenka, nes dauguma atveju norima perspeti vartotoja B, kad 
duomenys buvo pakeisti kito vartotojo ir jis nera mates nauju duomenu ir net 
nezinodamas to jis prides 20 prie originalios reiksmes, vietoj 10, kuriuos 
norejo prideti.
Ar puo sakiniu "Mane labiau domina kelių vartotojų darbas su DB tuo pačiu 
metu." slepiasi butent toks scenarijus?