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