generator neprerusovane rady cisel

Jan Serak sherry na pikebo.cz
Pondělí Únor 11 16:22:55 CET 2002


"Ing. Pavel PaJaSoft Janousek" wrote:
> 
> Karel Zak wrote:
> >  BEGIN;
> >  UPDATE .. SET id=id+1;
> >  SELECT id ...;
> >  nejake pouziti id;
> >  COMMIT;
> 
>         Neco mi to pripomina...:-)
> 
>         Ale chci se naopak zeptat ja, garantuje SQL atomicnost na urovni SQL
> prikazu nebo az na urovni pristupu k tabulkam (ci jinym datovym
> objektum)?

Oracle to ma ve sve dokumentaci celkem pekne popsane. Atomicnost v ramci
DML musi byt zajistena VZDY.

Nemuze se stat, ze proti sobe jdou napr.:

	update tabulka set nahoru=nahoru+1,dolu=dolu-1 where id=neco;

a

	insert into tabulka (nahoru,dolu,id) values (0,0,neco);

ze ten update zvedne hodnotu atributu nahoru v jednom zaznamu
a snizi hodnotu atributu dolu uz u dvou. To by nebyla databaze, ale
chaos.

Atomicnost na urovni cteni (data read consistency) na urovni transakce
musi byt tez zarucena, takze napr. kdyz se vloudi do behu
_DLOUHOU_DOBU_BEZICI_QUERY_ z jineho sezeni nejaky DML prikaz, tak
ta _DLO...RY_ musi vratit data v tom stavu, v jakem byla databaze
v okamziku jejiho spusteni. To pravdepodobne nedokazou zajistit
vsechny databaze (napr. si nedokazu predstavit, jak to funguje
napr. v MySQL, kdyz neumi transakce).

Takze na atomicnost na urovni prikazu se muzeme spolehat.

Jinak abych se vratil k tematu. Souvislost cislovani v sekvencich
je vec, ktera IMHO nesouvisi s databazovymi technologiemi. Sekvence
ma za ukol pridelovat UNIKATNI hodnoty pro primarni klice. To je
v databazi dulezite.

Spojitost cislovani (napr. ucetnich dokladu) uz neni pozadavkem na
databazi, ale na aplikaci. Navic tento problem nema na urovni
databaze obstojne reseni - kdyz uz je reseni spolehlive, je neunosne
pomale.

Reseni na urovni aplikace muze byt on-line nebo off-line:

- on-line: GUI (formular nebo proste neco, co stoji mezi uzivatelem
a databazi) pozada o prideleni unikatniho cisla "porizovaci" sekvenci
a na pokyn uzivatele "uloz do DB" (v ramci nehoz se provadeji vlastni
inserty do DB) ziska z "ostre" sekvence jine unikatni cislo. "Ostra"
sekvence vsak uz bude spojita, ponevadz v teto fazi uz nikdo nezvladne
odrollovat transakci.

- off-line: spociva v pouziti falesneho primarniho klice. Skutecny
primarni klic nemusi tvorit posloupnou radu, protoze je pro uzivatele
aplikace neviditelny. Falesny primarni klic je pak obycejny atribut,
ktery bude v urcite fazi zpracovani naplnen (treba i davkove)
cislem z "ostre" sekvence.

Je to na prvni pohled ojebavka podle hesla Vlk se nazral a kozy zustaly
cele, ale ve skutecnosti je to kompromis mezi chtenym a moznym.
A mimochodem, uzivatele budou vzdy preferovat pruchodnost systemu
pred vyumelkovanym, cistym, ale pomalym resenim.

				Jan Serak


Další informace o konferenci Test