2013-05-27 10 views
6
write(T1, balx), read(T2, balx), write(T1, balx), commit(T2), abort(T1) 

Wracam do egzaminu i to jedno z pytań, które przeglądałem na fałszywym papierze.Czy można to przekształcić w postać szeregową?

Według Schematu Znakowania odpowiedź jest taka, że ​​transakcję można szeregować. Ale po prostu nie rozumiem jak.

T1 i T2 zostają uwięzione w cyklu, gdy T1 wskazuje na T2, a następnie wskazuje na T1 na wykresie pierwszeństwa, w związku z czym nie nadaje się do serializacji. Czy oznaczenie jest złe, czy też coś tu brakuje?

+1

Znacznik: "Serializacja to proces, w wyniku którego obiekt jest konwertowany na format, który można zapisać, a następnie pobrać." – Barmar

+0

to jest mój błąd :). – UmNyobe

Odpowiedz

1

Myślę, że kluczową sprawą jest to, że T1 przerwać. Jeśli się nie mylę, dopóki transakcja nie zostanie zatwierdzona, można bezpiecznie założyć, że dysk nie został zmodyfikowany. Co oznacza, że ​​gdy T1 przerywa, stan bazy danych był taki sam jak z powodu tej sekwencji operacji. I to jest oglądanie T2.

Zatem, jeśli mieliśmy

write(T1, balx), write(T1, balx), abort(T1), read(T2, balx), commit(T2) 
read(T2, balx), commit(T2), write(T1, balx), write(T1, balx), abort(T1) 

Wtedy stan bazy danych i transakcji T2 będzie taka sama jak w swoim przykładzie. Teraz, jeśli T1 popełnił, będziesz poprawny, wywołując wykres pierwszeństwa.

+0

Dzięki, bardzo docenione. – user2212485

Powiązane problemy