Professional Documents
Culture Documents
Odpowiedź:
Blokowanie w 2PC
Przyjmijmy sekwencję komunikatów:
1) koordynator S1 rozsyła komunikat <prepare>
2) S2 i S3 odsyłają <ready> i wchodzą w stan pre-commited
3) koordynator podejmuje decyzję commit, ale przed awarią zdążył wysłać commit tylko
do S2
4) awaria – pada koordynator S1 oraz stacja S2
BLOKADA – S3 nie ma możliwości sprawdzenia jaką decyzję podjął koordynator, ani
czy stacja S2 wykonała commit, czy abort, czy jeszcze nic – S3 MUSI CZEKAĆ, aż S2
się podniesie
Rozwiązanie w 3PC
1) koordynator S1 rozsyła <prepare>
2) odbiera od wszystkiech (S2 i S3) <yes>
3) próbuje rozesłać <pre-commit>
4) awaria – pada koordynator oraz S2
Stacja S3 po zorientowaniu się, że tylko ona przetrwała awarię może samodzielnie podjąć
decyzję o zatwierdzeniu/wycofaniu transakcji:
• Jeśli S3 otrzymała komunikat <pre-commit>, to wie, że wszystkie stacje są gotowe do
commit (zagłosowały <yes>) więc można podjąć decyzję o commice, gdy stacja S2
się podniesie będzie mogła dowiedzieć się o commicie i dokończyć transakcję – ale
nie ma blokowania - S3 nie musi czekać na S2.
• Jeśli S3 nie otrzymała <pre-commit> może podjąć decyzję abort, ma pewność, że nikt
nie wykonał commita, ponieważ S3 nie wysłała <ACK>, gdy S2 się podniesie będzie
mogła wycofać u siebie transakcję.
2. (10pkt) System rozproszony składa się z dwóch lokalnych baz danych D1={a, b} i
D2={c, d, e}.
(A) Dana jest realizacja rozproszona S={s1, s2} transakcji globalnych T1 i T2 i
transakcji lokalnej T3 następującej postaci:
Odpowiedź:
T1 T2
T3
Nie, realizacja nie jest globalnie konfliktowo-uszeregowalna – jest cykl w
globalnym grafie uszeregowania
Tak, realizacja jest quasi-uszeregowalna – na obu stanowiskach operacje T1 są w
całości wykonywane przed T2
Odpowiedź:
T1 T2
T3
Tak, realizacja jest globalnie konfliktowo-uszeregowalna – brak cyku w
globalnym grafie uszeregowania
Tak, realizacja jest quasi-uszeregowalna – ponieważ jest konfliktowo-
uszeregowalna
Odpowiedź:
T1 T2
T3
Nie, realizacja nie jest globalnie konfliktowo-uszeregowalna – jest cykl w
globalnym grafie uszeregowania
Ten moment jest najbardziej kontrowersyjny, po dyskusji z prof. Morzym
ustalono: Tak, realizacja jest quasi-uszeregowalna – istnieje taka realizacja
konfliktowo równoważna realizacji s2’’, że na obu stanowiskach operacje T1 są w
całości wykonywane przed T2.
Przykład takiej realizacji:
w3(d) r1(d) r2(c) w3(c)
3. (10pkt) Dany jest następujący graf WFG (waits-for graph) dla transakcji
rozproszonych T1 do T6 na serwerach A, B i C.
Serwer A
T1 T2 T3
T1 T5 T5 T3
T6 T6 T4
Serwer C Serwer B
Odpowiedź:
Zgodnie z algorytmem każdy serwer mający ścieżkę oczekiwań od transakcji Ti do
transakcji Tj (do Ti krawędzie wchodzą, z Tj wychodzą) wysyła wzdłuż wychodzących z
serwera krawędzi całą znaną mu ścieżkę oczekiwań , jeżeli Ti<Tj.
Po otrzymaniu takiej ścieżki, serwer „dokleja” ją do ścieżki, którą już miał i tak
powiększoną ścieżkę ponownie wysyła wzdłuż wychodzących z niego krawędzi jeśli
Ti<Tj.
Sekwencja komunikatów:
Serwer A wysyła wzdłuż wychodzącej z niego krawędzi (czyli do serwera B) całą znaną
sobie ścieżkę oczekiwań, gdyż T1<T3.
Komunikat od serwera A do B wygląda następująco:
T1 T2 T3
W tym samym czasie serwer B, dla którego również spełniony jest warunek Ti<Tj , gdyż
T3<T5 i T3<T6 wysyła komunikat do serwera C. W chwili wysłania komunikatu do
serwera C serwer B nie dysponuje jeszcze informacją otrzymaną od serwera A. Serwer B
wysyła do serwera C komunikat w postaci:
T3 T4 T5
T6
W tym samym czasie serwer C nie wysyła żadnego komunikatu do serwera A, gdyż na
serwerze C nie jest spełniony warunek Ti<Tj (T5>T1).
T1 T2 T3 T4 T5
T6
T2 T3 T4 T5
T6
T1
Supply
SNUM=SNUM DPNUM=DPNUM
Supplier Dept
Przyjmij następujący profil bazy danych.
Supplier
Card=200, site=1
SNUM Name
Size 4 20
Val 200 200
Supply
Card=5000, site=2
SNUM DPNUM
Size 4 2
Val 1000 100
Dept
Card=20, site=3
DPNUM Name
Size 2 3
Val 20 5
Założenia:
• Wszystkie wartości SNUM relacji Supplier należą do zbioru SNUM relacji Supply
• Wszystkie wartości DPNUM relacji Dept należą do zbioru DPNUM relacji Supply
• C0=0, C1=1, i.e. C(X)=X
Zadanie:
• Zaproponuj sekwencję operacji półpołączenia, która maksymalnie, Twoim zdaniem,
zredukuje relacje uczestniczące w zapytaniu
• Na jakim stanowisku należy wykonać ostateczną operację połączenia zredukowanych
relacji. Uzasadnij odpowiedź.
Odpowiedź:
Należy zastosować algorytm o nazwie SDD1(?), którego nie ma na slajdach. Algorytm
w każdym kroku analizuje wszystkie możliwe operacje półpołączenia i wybiera tę, która daje
największy zysk. Algorytm działa tak długo jak którykolwiek zysk > koszt. Zysk i koszt
oblicza się następująco - przykład dla relacji R i S, które są na różnych site-ach i dla
semijoina R’ = R SJA=B S:
Zysk mówi o tym, o ile zmniejszyła się relacja R, gdy zrobiono semijoina R’ = R SJA=B S,
czyli zysk = size(R)*card(R) - size(R’)*card(R’) bajtów. Pytanie jak obliczyć card(R’).
Zgodnie ze slajdem 18 z Query Optimization oblicza się najpierw współczynnik
p = val(B[S]/val(dom[A]) !!!! (Uwaga - BŁĄD NA SLAJDZIE), a następnie
card(R’) = p * card(R). Ponieważ size(R) = size(R’) ostateczny wzór na zysk jest następujący:
zysk = (1-p) * card(R) * size(R) bajtów
Wartość val(dom[A]) to liczba różnych wartości dziedziny atrybutu A (a więc również
B), czyli np. jeżeli atrybuty A i B są nazwami miast, to val(dom[A]) jest liczbą wszystkich
miast jakie występują lub mogą wystąpić w relacjach R i S. Chodzi o to, że pewne miasta
mogą występować wyłącznie w relacji R, a inne wyłącznie w relacji S, czyli
val(dom[A])>=max(val(A),val(B))
Koszt jest związany z koniecznością przesłania wszystkich wartości atrybutu
połączeniowego B od site-a z relacją S do site-a z relacją R, czyli koszt = val(B)*size(B)
bajtów
Wybieram pierwszy wiersz jako najbardziej korzystny. W zasadzie to nie wiem, czy
należy wybierać semijoina o największym zysku, czy największej różnicy między zyskiem,
a kosztem, ale że dwa semijoin-y mają równy zysk, a jeden ma mniejszy koszt, to tego
wybieram.
„Parametry” powstałej relacji Supply’ są następujące:
Supply’
Card=1000, site=2
SNUM DPNUM
Size 4 2
Val 666 20
Wartości Size przy semijoinie sie nie zmieniają (patrz slajd 19).
Wartości Val zmieniają się zgodnie ze slajdem 19:
- jeżeli atrybut należał do semijoina to liczba różnych wartości jest uzyskiwana przez
pomnożenie przez p, czyli val(DPNUM[Supply’]) = p * val(DPNUM[Supply]) =1/5*100= 20
- jeżeli atrybut nie należy do semijoina to liczba różnych wartości jest uzyskiwana przez
formułę Yao (slajd 9), w naszym przypadku dla atrybutu SNUM z parametrami
następującymi n = card(Supply) = 5000, m = val(SNUM[Supply]) = 1000,
r = card(Supply’) = 1000
r, je¿eli r < m / 2
val(SNUM[Supply’]) = (r + m) / 3, je¿eli m / 2 ≤ r ≤ 2m
m, je¿eli r ≥ 2m
W naszym przypadku zachodzi przypadek środkowy czyli
val(SNUM[Supply’]) = (1000 + 1000) / 3 = 666
b) Następny etap półpołączeń
Operacja Koszt (w Zysk (w bajtach) p
bajtach)
Dept SJDPNUM=DPNUM Supply’ 2*20 = 40 0 1
Supply’ SJSNUM=SNUM Supplier 4*200 = 800 4/5*5000*6 = 24000 1/5
Supplier SJSNUM=SNUM Supply’ 4*666 = 2666 2/3 * 200 * 24 = 3200 2/3
c) Następny etap
Operacja Koszt (w Zysk (w bajtach) p
bajtach)
Dept SJDPNUM=DPNUM Supply’’ 2*20 = 40 0 1
Supplier SJSNUM=SNUM Supply’’ 4*133 = 533 2/3 * 200 * 24 = 3200 2/3
Znowu komentarza wymaga wartość p = 2/3. Wartość val(dom[SNUM]) = 200. Dzieje się
tak dlatego, że po półpołączeniu Supply’’ = Supply’ SJSNUM=SNUM Supplier mamy pewność,
że w relacji Supply’’ nie ma już innych wartości atrybutu SNUM oprócz takich, które
występują również w Supplier. Zbiór wartość SNUM[Supply’’] ⊂ SNUM[Supplier], czyli
dziedzina wartości atrybutu Supplier składa się z 200 wartości.
Supplier’
Card=133, site=1
SNUM Name
Size 4 20
Val 133 111
d) Następny etap
Operacja Koszt (w Zysk (w bajtach) p
bajtach)
Dept SJDPNUM=DPNUM Supply’’ 2*20 = 40 0 1
Ostateczna operacja połączenia powinna być wykonana na tej maszynie, na której jest
najwięcej danych uczestniczących w połączeniu.
Dla site-a 1 = card(Supplier’) * size(Supplier’) = 133 * 24
Dla site-a 2 = card(Supply’’) * size(Supply’’) = 200 * 6
Dla site-a 3 = card(Dept) * size(Dept) = 20 * 5
Jak widać operację połączenia wykonujemy na stanowisku 1.
5. (4pkt) W odpowiednie miejsca w poniższej tabeli wstaw odpowiedzi TAK lub NIE.
część a)
Dla poniższego zapytania zdefiniuj proste reguły będące specyfikacją mediatora, które
pozwolą na jego (zapytania) realizację. Pokaż sposób transformacji zapytania przy
wykorzystaniu utworzonych przez Ciebie reguł. Przez proste reguły rozumiemy reguły
odnoszące się tylko do jednego źródła. Przez element identyfikujący (identyfikator
semantyczny) pracownika przyjmij jego nazwisko (N).
Odpowiedź:
Proste reguły:
1) <N{<stanowisko S><zespol Z>}>:-
<zespol{<nazwa Z><pracownik{<nazwisko N><stanowisko
S>}>}>@X1
2) <N{<email E>}>:-
<pracownik{<nazwisko N><email E>}>@X2
Transformacja zapytania:
<N {<stanowisko S> <zespol Z> <email E>}>:-
<N{<stanowisko S><zespol Z>}>
AND
<N{<email E>}>
AND
Z = ‘Bazy Danych’
część b)
Dokończ następujące reguły specyfikacji mediatora. Przez element identyfikujący
(identyfikator semantyczny) pracownika przyjmij jego nazwisko (N).
1) <N{<stanowisko S>}>:-<zespol{<pracownik{<nazwisko
N><stanowisko S>}>}>@X1