Metody synchronizacji

Transkrypt

Metody synchronizacji
Zależności
narzędzie do analizy poprawności
współbieżnych transakcji
Założenie początkowe:
Operacje wykonywane na danych są nierozróżnialne
O zależności D między transakcjami mówimy wtedy, gdy
istnieje obiekt O oraz operacje X i Y takie, że operacja X
transakcji Ti wykonywana na obiekcie O poprzedza operację Y transakcji Tk wykonywaną na obiekcie O, co zapisujemy D: Ti:X →O Tj:Y. Mówimy wtedy, że transakcja
Tk zależy od transakcji Ti, lub, że transakcja Ti poprzedza transakcję Tk.
W zbiorze transakcji τ występuje relacja zależności <D ,
co zapisujemy Ti <D Tk , gdzie Ti, Tk ∈ τ, i ≠ k, jeżeli w historii transakcji istnieje zależność D: Ti:X →O Tj:Y.
Definicja
Historia s(τ) jest uszeregowalna ze względu na zbiór
relacji zależności {<D} wtedy i tylko wtedy, gdy tranzytywne domknięcie tej relacji <D*, jest relacją częściowego
porządku.
Synchronizacja transakcji,
a semantyka operacji
• Nieuwzględnienie semantyki danych może prowadzić do niespójności
Przykład
Operacje relacyjnego modelu danych: selekcja, projekcja, połączenie, modyfikacja, usuwanie, itp. są implementowane za pomocą operacji elementarnych
read i write.
Transakcja T1 odczytuje zbiór danych X, który spełnia
dany warunek zapytania p. Przed jej zakończeniem
inna transakcja T2 tworzy nową lub modyfikuje istniejącą daną x do wartości x’, która będzie spełniać warunek p (dana x przed modyfikacją nie spełniała warunku p. Następnie transakcja T1 odczytuje zmieniony
zbiór danych X’, który spełnia warunek p.
r1[X], ..., w2[x→x’∈X], ..., r1[X’]
Synchronizacja operacji elementarnych może prowadzić do błędu (anomalia typu fantom). Algorytmy
synchronizacji nieświadome semantyki operacji relacyjnych nie będą umiały prawidłowo zarządzać transakcjami współbieżnymi.
Synchronizacja transakcji,
a semantyka operacji
• Uwzględnienie semantyki danych może podwyższyć stopień współbieżności
Aplikacja wykonuje modyfikacje przyrostowe: incr i
decr. Są one zaimplementowane za pomocą atomowego wykonania elementarnych operacji read i write.
Synchronizacja transakcji zawierających operacje semantyczne incr i decr charakteryzuje się niską współbieżnością.
Read Write
9
Read
Write
incr(x)
T1
read(x) write(x)
commit
incr(x)
T2
read(x) wait
write(x)
Uwzględnienie specyficznej semantyki operacji może
zwiększyć współbieżność transakcji. Operacje incr i
decr wykonane na tej samej danej są wzajemnie komutatywne.
Read Write Incr
9
Read
Write
9
Incr
9
Decr
-
Decr
9
9
Rozszerzenie zbioru blokad używanych przez algorytm
blokowania dwufazowego o blokady specyficzne dla tych
operacji o nowej semantyce zwiększy stopień współbieżności transakcji.
T1
T2
incr(x)
incr(x)
commit
commit
Baza semantycznych danych
Aplikacje przetwarzają w bazie danych wystąpienia abstrakcyjnych typów danych, na przykład:
• katalog
• kolejka
• figura geometryczna
• towar
Aplikacje wykonują na danych operacje semantyczne:
• wstawienie elementu do kolejki
• usunięcie elementu z kolejki
• wstawienie pozycji do katalogu
• odczytanie pozycji z katalogu
• odczytanie całego katalogu
• obrót figury
• sprzedaż towaru
Przykład
Typ obiektu: Directory
Zbiór operacji:
Insert (dir, σ, info)
do katalogu dir wstaw informację info z kluczem σ ;
na koniec zwróć potwierdzenie OK lub komunikat
duplicate key;
Delete (dir, σ)
z katalogu dir usuń pozycję identyfikowaną przez
klucz σ ; na koniec zwróć potwierdzenie OK lub
komunikat not found;
Find (dir, σ)
szukaj w katalogu dir pozycji identyfikowanej przez
klucz σ ; na koniec zwróć potwierdzenie OK lub
komunikat not found ;
Dir (dir)
zwróć kompletną zawartość katalogu dir.
Jakie elementy semantyki operacji
należy uwzględnić?
•
typ operacji
Insert
Delete
Find
Dir
?
?
?
-
?
?
?
-
?
?
D
D
D
D
Insert
Delete
Find
Dir
•
argumenty operacji
Insert(x) Delete(x) Find(x) Dir
Insert(x)
Insert(y)
Delete(x)
Delete(y)
Find(x)
Find(y)
•
D
D
D
D
D
D
D
D
D
D
D
D
stan danych
Insert(x) Insert(x) Delete(x) Delete(x)
OK
dk
OK
nf
Insert(x) OK
-
Insert(x) dk
-
Delete(x) OK
D
Delete(x) nf
D
D
D
D
-
-
D
…
Semantyczna
uszeregowalność transakcji
Dla historii s(τ) jest możliwe określenie zbioru wszystkich
możliwych relacji zależności między współbieżnymi
transakcjami. Podzbiór tego zbioru obejmujący operacje
mające wpływ na poprawność danej historii jest nazywany zbiorem konfliktowych relacji zależności i oznaczany jako <K. Pozostałe zależności tworzą zbiór nieistotnych relacji zależności.
Definicja
Historia s(τ) jest semantycznie uszeregowalna wtedy i
tylko wtedy, gdy tranzytywne domknięcie zbioru konfliktowych relacji zależności <K*, jest relacją częściowego
porządku.
Przykład
Zbiór relacji zależności dla obiektu typu Directory obejmuje następujące relacje:
Typ
operacji
insert(x) OK
insert(x) OK insert(x) dk delete(x) OK delete(x) nf find(x) OK find(x) nf
dir
K*
K*
K
K
K*
K
K
insert(x) dk
K
NK
NK*
K*
NK
K*
NK
insert(y) OK
NK
NK
NK
NK
NK
NK
K
insert(y) dk
NK
NK
NK
NK
NK
NK
NK
delete(x) OK
K
K
NK*
K*
K
K*
K
delete(x) nf
NK*
K*
K
NK
K*
NK
NK
delete(y) OK
NK
NK
NK
NK
NK
NK
K
delete(y) nf
NK
NK
NK
NK
NK
NK
NK
find(x) OK
K
NK
NK*
NK
NK
K*
NK
find(x) nf
NK*
K*
K
NK*
K*
NK
NK
find(y)
NK
NK
NK
NK
NK
NK
NK
dir
K
NK
K
NK
NK
NK
NK
*operacje przedzielone innymi operacjami konfliktowymi
Wyznaczanie minimalnej liczby blokad
Sklejanie takich samych wierszy i kolumn tablicy
Typ
operacji
insert(x) OK
insert(x) OK delete(x) OK insert(x) dk delete(x) nf find(x) OK find(x) nf
dir
n/a
K
n/a
K
n/a
K
K
delete(x) OK
K
n/a
K
n/a
K
n/a
K
insert(x) dk
K
n/a
NK
n/a
NK
n/a
NK
delete(x) nf
n/a
K
n/a
NK
n/a
NK
NK
find(x) OK
K
n/a
NK
NK
NK
n/a
NK
find(x) nf
n/a
K
n/a
n/a
n/a
NK
NK
insert(y) OK
NK
NK
NK
NK
NK
NK
K
delete(y) OK
NK
NK
NK
NK
NK
NK
K
insert(y) dk
NK
NK
n/a
NK
NK
NK
NK
delete(y) nf
NK
NK
NK
NK
NK
NK
NK
find(y)
NK
NK
NK
NK
NK
NK
NK
dir
K
K
n/a
NK
NK
NK
NK
Wyznaczanie minimalnej liczby blokad
Potrzebne są trzy typy blokad:
• DirModify – dla udanych operacji insert i delete
• DirLookup – dla nieudanych operacji insert i
delete oraz dla operacji find
• Dump – dla operacji dir
Ponadto typy blokady muszą być uzupełnione o wartości
argumentu klucza σ.
Typ
blokady
DirModify(x) DirLookup(x)
Dump
DirModify(x)
K
K
K
DirModify(y)
NK
NK
K
DirLookup(x)
K
NK
NK
DirLookup(y)
NK
NK
NK
Dump
K
NK
NK
Zwiększenie
współbieżności transakcji
Synchronizacja klasyczna
Delete(dir, x)
Commit
T1 Read(dir) Write(dir)
Find(dir, x)
T2
wait
Read(dir)
Synchronizacja semantyczna
T1
T2
Delete(dir, x)
Find(dir, y)
Commit
Commit