«« ( Date ) »» // «« ( Thread ) »» // nastava - 2003

Re: evo roka iz baza

by Nikola Novakovic
četvrtak, 20. februar 2003 - 10:43.

G. Damjane i ostali,

Sve ovo dole odnosi se na poslednji zadatak u januarskom roku iz Baza Podataka,
ciju je tabelu transakcija Milan vec poslao na grupu.

Molim Vas izjasnite se o ovome, i ako negde gresim, samo recite:

1. Damjan, Wednesday, February 19, 2003 4:48 PM:
When a program needs to access a data item X for the first time, it must execute read(X,xi). All updates to X are then performed on xi. After the program accesses X for the last time, it must execute write(X,xi) in order to reflect the change to X in the database itself.
The output(X) operation need not take effect immediately after the write(X,xi) is executed, since the block on which X resides may contain other data items that are still being accessed. Thus, the actual output takes place later. Notice that if the system crashes after the write(X,xi) operation was executed but before output(X) was executed, the new value of X is never written to disk and, thus, is lost."

Prvo da usaglasimo sintaksu. Ono što naš cenjeni profesor označava sa X:=X+1 gospoda označavaju sa xi:=xi+1 (menja se samo lokalna kopija), dok je Write(X) ekvivalentno sa Write(X,xi) (upisuje se u deljenu memoriju). I sada ide ključni deo (onaj podvučeni). Gospoda kažu da je ideja cele priče da se u okviru jedne transakcije operacija Write(X,xi) može pojaviti najviše jednom (što je i logično jer nema mnogo smisla u deljenu memoriju upisivati više od jedanput).

Transakcija T2 ne postuje ovaj protokol. Ona izvrsava Write(A) u trenutku t14, kao i u trenutku t32.
Ili gresim?

2. Damjan, Wednesday, February 19, 2003 3:08 PM:
Ako je tabela koju si mi poslao ispravna, onda je redosled serijalizovan i odgovara serijskom redosledu
T5 -> T1 -> T3 -> T2 -> T4
Hint: Razmisli da li baš možeš da primeniš neoznačeni graf! Pogledaj semantiku transakcije. Šta bi se desilo kada bi u transakciji T2 izbacio Read(A)? Suštinski ništa, a ti bi onda rekao da treba primeniti označeni graf. Slično je i sa Read(C) iz T4, ali to sada i nije bitno.

Kako se nista ne bi desilo? Da bi izvrsila operaciju (t13)::A:=B*2, transakcija T2 mora da dovuce A sa
diska u operativnu memoriju, ili, ako je A vec u operativnoj memoriji, da bar azurira svoju TTS. I jedno i
drugo radi instrukcija (t12)::Read(A).
Ili gresim?

3. Damjan, Wednesday, February 19, 2003 3:08 PM:
Ako je tabela koju si mi poslao ispravna, onda je redosled serijalizovan i odgovara serijskom redosledu
T5 -> T1 -> T3 -> T2 -> T4

Da li si siguran? U trenutku t31 transakcija T2 radi G:=G+A, nakon sto je, u trenutku t26, T3 postavila
novu vrednost A (Write(A)). Ovde je u stvari pitanje da li nakon sto T3 izvrsi (t26)::Write(A), T2 azurira
svoj pokazivac na A u tekucoj tabeli stranica? Ako azurira, serijalizovan redosled ne postoji. Ako ne azurira, onda serijalizovan redosled postoji, i to T3 -> T2.
Ili gresim?


Pozdrav,

Nikola