pobierz plik referatu
Transkrypt
pobierz plik referatu
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Rozdział 18 w Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych w 1 Wstęp da .b w Streszczenie. W pracy proponujemy wykorzystanie etykietowania węzłów dokumentu XML do celów efektywnego zarządzania blokadami. Rozważamy dwa rodzaje tzw. blokad strukturalnych, którymi są blokada ścieżki oraz blokada zakresu, rozumianego jako pewien podzbiór węzłów dokumentu wyznaczony przez parę etykiet. Proponujemy algorytmy konsolidacji blokad współdzielonych, wyznaczające spójny zbiór pokrywający, będące formą przetwarzania wstępnego, które upraszcza i przyspiesza działanie menedżera blokad. Wykorzystanie etykiet XML rozważamy zarówno w kontekście protokołu B2F (blokowanie dwufazowe – 2PL) jak i protokołów kooperacyjnych, proponując dwa algorytmy dla menedżera kooperacyjnego. pl s. Rosnące znaczenie dokumentów XML w systemach informatycznych sprawia, że coraz bardziej popularne stają się tzw. rodzime (native) systemy przetwarzania, które oprócz efektywnej obsługi mechanizmów przechowywania, wyszukiwania oraz aktualizacji powinny umożliwiać przetwarzanie współbieżne. Nawet pobieżna analiza kodu źródłowego dowolnego systemu zarządzania relacyjną bazą danych uzmysławia skalę zadań związanych z obsługą synchronizacji transakcji współbieżnych oraz odtwarzania. Przypadek baz danych XML jest jeszcze bardziej skomplikowany, gdyż leżący u jego podstaw hierarchiczny model danych operuje bardziej złożonymi obiektami i pojęciami. W niniejszym rozdziale chcemy się zająć obsługą blokad pewnych typowych dla dokumentów XML obiektów takich jak: ścieżka, zakres węzłów (zgodny z pewnym porządkiem enumeracji) oraz poddrzewo. Zauważmy, że zarządzanie blokadami zakładanymi na pojedynczych węzłach dokumentu XML (czyli blokadami ekstensjonalnymi) jest kwestią, która nie wychodzi poza zakres obejmujący konwencjonalne systemy baz danych. Zauważmy też, że monografia [1] w żaden sposób nie ogranicza swych rozważań do baz relacyjnych, czyniąc je adekwatnymi również w przypadku współbieżnego przetwarzania dokumentów XML. Pomysłem prezentowanym w tej pracy jest wykorzystanie tzw. etykiet węzłów do celów efektywnego zarządzania współbieżnością w systemach rodzimych baz danych XML. Etykiety węzłów są pewnymi obiektami danych, inteligentnymi identyfikatorami, które oprócz Andrzej Sikorki Politechnika Poznańska, Instytut Automatyki i Inżynierii Informatycznej, ul. Piotrowo 3a, 60-965 Poznań, Polska email:[email protected] (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 A. Sikorski w tego, że jednoznacznie identyfikują węzły dokumentu XML, pozwalają również na ustalenie ich wzajemnego położenia (przykładowo rodzic-potomek) w strukturze danych [9], [15]. Własność ta jest niezmiernie przydatna do celów efektywnego przetwarzania zapytań w języku XPath, zarówno w systemach rodzimych jak i hybrydowych (relacyjno-rodzimych) [4], [5]. W niniejszej pracy pokazujemy, że menedżer blokad może korzystać z etykiet w zarządzaniu pewnym szczególnym typem blokad intensjonalnych, nazywanych przez nas blokadami strukturalnymi, zakładanymi na zbiorach wierzchołków znajdujących się w relacjach określonych przez strukturę hierarchiczną. Wyodrębnione przez nas blokady strukturalne, wynikają z obiektowego charakteru dokumentu XML i mają za zadanie odzwierciedlić powiązania pomiędzy poszczególnymi składowymi modelu obiektowego. Podobnie jak w przypadku blokad intensjonalnych, blokady strukturalne zakładane są na zbiory obiektów, jednakże tym razem zbiór wyznaczany jest na podstawie wzajemnych powiązań między obiektami. Korzystając z nowych dokonań w zakresie identyfikowania obiektów dokumentu XML, w naszej pracy pokazujemy, że zarządzanie blokadami tego typu może być realizowane z dużą efektywnością, porównywalną z efektywnością implementacji blokad ekstensjonalnych, zakładanych na pojedynczych węzłach. w w 2 Model dokumentu XML, etykiety da .b Chociaż prezentowane wyniki uzyskano w ramach prac nad zagadnieniami współbieżnego przetwarzania dokumentów XML dotyczą one generalnie hierarchicznych struktur danych. Model struktury hierarchicznej przyjęty w naszych rozważaniach pokazany jest na rys. 1. Składa się on z węzłów oznaczonych kółkami, między którymi występują powiązania określające hierarchię: rodzic-potomek (child) oraz rodzeństwo (sibling). Powiązanie określone jako sibling jest nieco rozszerzone, tj. w przypadku gdy węzeł jest najmłodszy z rodzeństwa, sibling wskazuje na młodsze rodzeństwo najbliższego z przodków, które takie rodzeństwo posiada. Sibling jest wskazaniem pustym, jeśli takiego przodka nie ma. Wskazania takie wystąpią w skrajnej prawej ścieżce drzewa. child 2 sibling 3 sibling pl s. 1 6 7 sibling? (uncle) 4 5 Rys. 1. Wierzchołki drzewa zaetykietowane w porządku preorder Węzły w przyjętym modelu dokumentu są zaetykietowane. Na rys. 1 etykietami są numery wyznaczone w porządku preorder. To zaetykietowanie okaże się wystarczające do celów naszych rozważań. Niemniej należy pamiętać, że w ogólnym przypadku obiekt danych będący etykietą powinien spełniać szereg wymagań, na które składają się [15]: 230 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych w − wzajemne położenie w hierarchii między wierzchołkami może być ustalone na podstawie porównania wartości ich etykiet, − zmiana struktury drzewa, wynikająca z modyfikacji, usuwania bądź dodawania wierzchołków nie może powodować ponownego etykietowania, − etykiety powinny mieć ograniczone wymagania pamięciowe, − etykiety powinny sprawnie współpracować z funkcjami XPath oraz XQuery. Dla celów tej pracy istotny jest pierwszy z powyższych wymogów, spełniany przez ponumerowanie preorder. Wymogiem niespełnionym jest żądanie by zmiana struktury (np. wstawienie węzła) nie pociągała za sobą konieczności przeliczenia etykiet. Numerowanie preorder nie ma tej własności, jeśli używa się liczb całkowitych. Obecnie dwiema metodami etykietowania lepiej lub gorzej spełniającymi wymogi dot. modyfikowania struktury są ORDPATHs firmy Microsoft [9] (US Patent 6889226) oraz Prime [15]. My zakładamy jedynie, że etykiety są obiektami danych dającymi się liniowo uporządkować. w w 3 Blokady strukturalne da .b Dające się wyodrębnić w hierarchicznym zasobie danych struktury takie jak ścieżka, poddrzewo czy określony etykietami zakres są naturalnymi przedmiotami przetwarzania w bazie danych dokumentów XML. W związku z tym powstaje konieczność efektywnego zarządzani blokadami zakładanymi na tych strukturach. Praca [3] podaje dwie zasadnicze przyczyny, dla których blokady strukturalne są pożądane. Po pierwsze, przetwarzanie struktury danych może odbywać się niezgodnie z porządkiem hierarchicznym, tj. dostęp do potomka może zostać uzyskany z pominięciem węzłów rodzicielskich. W takim przypadku zachodzi potrzeba zablokowania całej ścieżki od korzenia do przetwarzanego węzła. Najprostszym rozwiązaniem jest wędrówka po tej ścieżce z jednoczesnym zakładaniem blokad na kolejne wierzchołki. Takie rozwiązanie jest nieefektywne zarówno pod względem złożoności czasowej (zależność od głębokości wierzchołka) jak i pod względem pamięciowym, co wynika z konieczności założenia i utrzymywania pewnej liczby blokad ekstensjonalnych. Należy również zauważyć, że w przypadku architektury serwera korzystającej z zewnętrznej implementacji DOM [11] z osadzonym w niej interpreterem XPath, wszelki dostęp do wynikowych wierzchołków odbywa się z pominięciem prowadzących do nich ścieżek. Zakładanie blokady na poddrzewo, drugi obok ścieżek charakterystyczny obiekt, jest proste, jeśli założyć, że dostęp do jego wierzchołków będzie odbywał się poprzez korzeń. Założenie to może jednak poważnie ograniczyć interpreter XPath i to nie tylko ze względu na wspomniane w [3], [8] skoki, zmieniające drzewo w ogólny graf. Architektura menedżera danych może preferować inne porządki przetwarzania, wyszukiwania czy też modyfikacji. W takiej sytuacji korzystne mogłoby być efektywne sprawdzenie czy dany wierzchołek został zablokowany a jeśli tak, to w jakim trybie, bez konieczności uprzedniego przechodzenia ścieżki wiodącej do niego od korzenia. Blokady zakresów ograniczonych wartościami etykiet mogą być interesujące ze względu na wsparcie dla eskalacji blokad i tzw. granulacji wieloziarnistej (MGL multi granularity locking) [2]. Inaczej niż w relacyjnych bazach danych, gdzie MGL postuluje pewien ściśle zhierarchizowany zestaw obiektów danych, w dokumencie XML zablokowany zakres może być określony dowolnie. Powinien on wynikać z analizy statystycznej gęstości blokad ekstensjonalnych założonych przez transakcję. W przypadku przekroczenia progu określonego w konfiguracji, menedżer dokonuje eskalacji, usuwając blokady ekstensjonalne i zastępując ją pojedynczą blokadą zakresu. Zauważmy, że „ziarna” w modelu relacyjnym wynikają pl s. 231 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 A. Sikorski z pojęć tego modelu oraz technik implementacji (krotka, strona menedżera danych, tabela, klaster itp.) W dokumencie XML liczba dostępnych, naturalnych poziomów granulacji odpowiada wysokości drzewa. Niemniej, można też rozważać czysto statystyczne podejście, w którym menedżer blokad ignoruje strukturę dokumentu (tj. zakresy nie odpowiadają poddrzewom). w 3.1 Blokada ścieżki Zablokowanie ścieżki odbywa się poprzez zapamiętanie przez menedżera blokad etykiety węzła leżącego na jej końcu. Jeżeli menedżer ma rozstrzygnąć czy węzeł N leży na zablokowanej ścieżce to sprawdzany jest następujący predykat: w is _ path _ locked( N ) ≡ ∃is _ locked( X ) ∧ label( N ) < label( X ) < label( sibling( N )) X w Gdzie label(N) oznacza etykietę przypisaną węzłowi N, natomiast sibling(N) oznacza opisane w p.2 rodzeństwo. Przyjmujemy dodatkowo, że label(null) przyjmuje pewną wartość maksymalną, nieużywaną do etykietowania węzłów znajdujących się w drzewie. 1 da .b 2 4 12 9 8 5 6 11 3 10 7 pl s. Rys. 2. Blokada ścieżki określona wartością etykiety Rozważmy teraz przykład (rys. 2). Jeżeli menedżer blokad otrzyma polecenie zablokowania węzła oznaczonego etykietą 10 oraz ścieżki do niego wiodącej, to zostanie zapamiętana etykieta wraz z odpowiednią adnotacją o typie blokady. Próba uzyskania dostępu do dowolnego węzła leżącego na ścieżce zostanie poprzedzona sprawdzeniem predykatu. Dla 3 okaże się, że istnieje takie x że 3<x<11 (x=10). Koszt tego sprawdzenia przy użyciu indeksu porządkującego zbiór blokad wyniesie najwyżej log(n), gdzie n jest liczbą założonych blokad. 3.2 Blokada zakresu Analogicznie jak w przypadku blokady ścieżki, menedżer przechowuje jedynie wartości etykiet. Tym razem jednak zapamiętywana informacja o założonej blokadzie jest zaopatrzona w dwie etykiety identyfikujące odpowiednio początek i koniec zablokowanego za232 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych kresu. Odpowiedni predykat, za pomocą którego menedżer sprawdza czy węzeł N leży w zablokowanym zakresie ma teraz postać: is _ range _ locked ( N ) ≡ ∃ label ( X ) < label ( N ) < label (Y ) ∧ is _ locked ( X , Y ) X ,Y w Menedżer musi więc sprawdzić, czy istnieje obiekt identyfikujący blokadę o dwóch etykietach pomiędzy którymi znajduje się bieżący węzeł. W szczególności może zachodzić Y=sibling(X), jeśli zakres dotyczy poddrzewa. Ponieważ zbiór blokad można przeszukiwać tylko względem jednego klucza, szczegółowemu omówieniu zagadnienia efektywnego rozstrzygania tego predykatu poświęcony zostanie kolejnym punkt. Okaże się przy tym, że należy oddzielnie rozpatrzyć przypadek blokad wyłącznych (exclusive - przypadek najprostszy), blokad współdzielonych dla blokowania dwufazowego oraz blokad współdzielonych dla blokowania kooperacyjnego (przypadek najbardziej złożony). Najpierw jednak podamy przykład. w w 1 3 2 da .b 9 4 8 5 6 12 10 11 7 Rys. 3. Blokada zakresu określona parą wartości etykiet pl s. Na rys. 3 przedstawiona jest sytuacja, gdy zablokowany jest zakres określony przez węzły o etykietach 3 oraz 11. Przykładowo dla wierzchołka 10 menedżer może stwierdzić, że istnieje blokada opatrzona etykietami 3 oraz 11, a więc jest 3<10<11. 4 Blokada wyłączna zakresu Identyfikowanych dwiema etykietami blokad zakresu nie da się poindeksować tak by w przypadku ogólnym rozstrzygać odpowiedni predykat w czasie log(n). Niemniej sprawdzenie czy węzeł znajduje się w zakresie zablokowanym w trybie wyłącznym okazuje się proste. Wystarczy bowiem sprawdzić dla danego węzła wartość największego poprzednika identyfikującego początek zablokowanego zakresu. Następnie należy jedynie sprawdzić czy etykieta identyfikująca koniec zakresu jest większa od etykiety sprawdzanego węzła. Jeżeli takiej blokady nie ma, to, jak można łatwo pokazać, węzeł nie może być zablokowany. Podamy teraz równoważną, korzystającą z tego spostrzeżenia, postać predykatu, dającą się zweryfikować w czasie log(n). Najpierw wprowadzamy predykat pomocniczy: 233 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 A. Sikorski left _ range( N ) ≡ max{label ( X ) : is _ locked ( X , Y ) ∧ label ( X ) < label ( N )} Dla danego węzła dokumentu XML wyznacza on etykietę węzła będącego początkiem zablokowanego obszaru takiego, że leży on na lewo od węzła będącego argumentem i takiego, że jego etykieta określająca początek ma maksymalną wartość. Zmodyfikowany predykat przybierze postać: is _ range _ locked _ exclusive( N ) ≡ is _ locked (left _ range( N ), Y ) ∧ label (Y ) > label ( N ) w w By go sprawdzić efektywnie wystarcza żeby menedżer blokad utrzymywał indeks porządkujący rosnąco blokady względem etykiet określających początki zakresu. Zauważmy, że utrzymywanie posortowanego zbioru początków zakresów nie wprowadzi dodatkowego narzutu na działanie menedżera blokad, ponieważ blokady ekstensjonalne i tak są na ogół przechowywane w indeksie uporządkowanym według identyfikatorów (kluczy) obiektów. w 5 Blokada współdzielona zakresu da .b Przypadek blokady współdzielonej jest bardziej złożony, gdyż obszary zablokowane mogą się częściowo pokrywać. Rozwiązaniem w tym przypadku jest utrzymywanie przez menedżera dodatkowej struktury danych zawierającej spójne obszary pokryte blokadami współdzielonymi. Zaproponujemy więc mechanizm wstępnego przetwarzania dla blokad współdzielonych, który będzie wyznaczać takie właśnie obszary określone etykietami. Zauważmy, że utrzymywanie struktury danych przechowującej informacje o spójnych obszarach zablokowanych (a nie tylko o założonych blokadach) znowu pozwoli na sprawdzenie w czasie log(n) czy wierzchołek jest zablokowany, gdzie n jest tym razem liczbą zakresów spójnych. Niemniej nakład związany z utworzeniem i utrzymywaniem tej dodatkowej struktury zależy od trybu pracy menedżera. Inaczej można postępować w przypadku blokowania dwufazowego B2F (blokady mogą być zdejmowane tylko w momencie zakończenia transakcji), inaczej gdy menedżer obsługuje jakąś wersję protokołu kooperacyjnego operującego blokadami w sposób bardziej swobodny. pl s. 5.1 Zarządzanie współdzielonymi blokadami zakresu dla protokołu B2F Dla protokołu B2F możemy przyjąć, że zdejmowanie blokad (w tym również zdejmowanie blokad zakresu) jest zdarzeniem zachodzącym rzadko w stosunku do częstotliwości, z jaką napływają żądania założenia blokady; zdejmowanie może mieć miejsce jedynie w momencie zakończenia transakcji. Dlatego jest dopuszczalne, by menedżer w momencie zakończenia transakcji dokonywał aktualizacji stanu pomocniczej struktury danych poprzez jej ponowne wygenerowanie dla każdego dokumentu XML, w którym zakończona transakcja utrzymywała blokady. Zauważmy, że aktualizacja w przypadku pojawienia się nowej blokady jest prosta i może być łatwo zintegrowana ze sprawdzaniem przez menedżera możliwości jej założenia, gdyż w obu przypadkach musi być przeszukany odpowiedni indeks. Każdorazowo, gdy transakcja jest zakończona i zdjęte zostaną uzyskane przez nią blokady, menedżer wywołuje procedurę CoverSet (implementacja w C# na rys. 4) Wynikiem wywołania tej procedury jest wyznaczenie ciągu spójnych zakresów pokrytych blokadami współdzielonym uzyskanymi przez aktywne transakcje. Dla obszarów spójnych można już stosować ten sam zmodyfikowany predykat, który podaliśmy dla przypadku blokad wyłącznych. 234 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych public static List<XmlNodeRangeLock> CoverSet(List<XmlNodeRangeLock> rangeLocks) { List<XmlNodeRangeLock> set = new List<XmlNodeRangeLock>(); List<XmlNodeRangeLock> sortedRangeLocks = SortByLeftAsc(rangeLocks); XmlNodeRangeLock last = new XmlNodeRangeLock(NegInfinity, NegInfinity); w w foreach (XmlNodeRangeLock xnrl in sortedRangeLocks) if (xnrl.left.value > last.right.value) { last = new XmlNodeRangeLock(xnrl); set.Add(last);} else if (xnrl.right.value > last.right.value) last.right.value = xnrl.right.value; return set; } Rys. 4. Implementacja funkcji znajdującej obszary spójne w 5.2 Zarządzanie współdzielonymi blokadami zakresu dla protokołów kooperacyjnych da .b Inaczej niż w przypadku protokołu B2F, transakcje kooperacyjne mogą zakładać i zdejmować blokady w dowolnym momencie. W poprzednim punkcie pokazaliśmy, że zdjęcie współdzielonej blokady zakresu jest związane z koniecznością ponownego wygenerowania zbioru zakresów pokrywających. Jest więc możliwe, że korzyści wynikające z zastosowania mniej restrykcyjnego protokołu zostaną utracone na skutek dodatkowego obciążenia menedżera blokad. Prostym rozwiązaniem może być opóźnianie zdejmowania blokad. Takie czysto techniczne rozwiązanie w oczywisty sposób niweluje zalety blokowania kooperacyjnego, gdyż obiekty zwolnione przez transakcje nadal pozostawałyby zablokowane. Jest to o tyle niepożądane, że aplikacje kooperacyjne i tak mogą ponosić pewne dodatkowe koszty związane z utrzymywaniem spójności danych na poziomie aplikacyjnym [10]. Rozwiązaniem, które tutaj zaproponujemy, jest minimalizacja pokrycia zakresu. Jeżeli menedżer blokad utrzymywałby dodatkowo minimalną listę blokad (minimalną w sensie długości listy) pokrywającą obszar spójny, to jak łatwo zauważyć lista taka może być wykorzystana do celów optymalizacji przetwarzania, bowiem jedynie usunięcie blokady zakresu wchodzącego w skład tejże listy powoduje, że zakres musi zostać zaktualizowany. Skoro lista ta jest minimalna, wynika stąd, że prawdopodobieństwo przynależności zdejmowanej blokady zakresu do tejże listy jest minimalne. Dlatego też menedżer blokad będzie musiał dokonywać aktualizacji zakresów tak rzadko jak to jest to tylko możliwe. Algorytm wyznaczający minimalne pokrycie znajduje również listę spójnych zakresów zablokowanych w trybie współdzielonym oraz dodatkowo minimalną listę blokad pokrywających każdy z tych zakresów. Podamy dwa warianty tego algorytmu: optymalny oraz rozszerzony. Pierwszy z nich charakteryzuje się krótkim czasem wykonania; drugi zaś umożliwia znalezienie wszystkich wariantów minimalnego pokrycia. Uzasadnimy dalej, że możliwość rozpatrzenia większej liczby kombinacji blokad zakresu może być pożądana w przypadku menedżera blokad działającego w trybie kooperacyjnym. Implementacja w C# algorytmu optymalnego podana jest na rys. 5. Algorytm ten ma złożoność liniową co już dowodzi jego optymalności, gdyż każda pojedyncza blokada zakresu musi być choć raz rozpatrzona jako kandydat na składową minimalnego pokrycia. Funkcja MinCover1Pass wyznacza ciągi zakresów dla poszczególnych obszarów spójnych posługując się utrzymywanym przez menedżera blokad indeksem porządkującym pl s. 235 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 A. Sikorski początki zakresów(Å{1}). Zwracamy uwagę na fakt, że w momencie wykonania instrukcji oznaczonej komentarzem (Å{2}) wiadomo już, że długość zakresu nie może być krótsza od bieżącej oraz, że zakres stający się poprzednikiem wstawianego nowego zakresu musi należeć do minimalnego pokrycia. Obydwu własności dowodzi się w prosty sposób. Jeśli chodzi o rząd złożoności to jest on liniowy, jeżeli pominąć etap sortowania. w da .b w w public static List<List<XmlNodeRangeLock>> MinCover1Pass(List<XmlNodeRangeLock> rangeLocks) { List<List<XmlNodeRangeLock>> set = new List<List<XmlNodeRangeLock>>(); List<XmlNodeRangeLock> range=null; XmlNodeRangeLock last=null; XmlNodeLabel l=MinLabel(); foreach (XmlNodeRangeLock xnrl in SortByLeftAsc(rangeLocks)) if (xnrl.left.value > l.value) //Å{1} { last = xnrl; range = new List<XmlNodeRangeLock>(); set.Add(range); range.Add(last); l = last.right; } else if (xnrl.right.value > l.value) { if (range.Count > 1 && range[range.Count - 2].right.value > xnrl.left.value) range[range.Count - 1] = xnrl;//Å{2} else range.Add(xnrl);// Å{3} last = xnrl; l = last.right; } return set; } Rys. 5. Optymalny algorytm znajdowania minimalnego pokrycia pl s. Algorytm optymalny wyznacza tylko pewne szczególne, zachłanne, pokrycie minimalne, gdyż, co łatwo można pokazać, bieżące pokrycie minimalne ma zawsze maksymalny zasięg (w sensie uporządkowania etykiet). Jednakże, transakcje kooperacyjne mogą dostarczać menedżerowi blokad pewnych dodatkowych informacji odnośnie planowanych interakcji z obsługiwaną przezeń bazą danych. Przykładowo, menedżer może być w stanie oszacować czas trwania transakcji kooperacyjnej – wiadomo, ze transakcje kooperacyjne bywają długotrwałe. Jeżeli istniałaby możliwość wyznaczania (przeglądania) wielu wariantów minimalnego pokrycia, to menedżer mógłby stosować dodatkowe kryteria przy ustalaniu wariantu optymalnego. Wskazane mogłoby być umieszczenie w takim pokryciu blokad, o których wiadomo, że w najbliższym czasie zostaną przez swoje transakcje utrzymane. Zaproponowany przez nas rozszerzony algorytm wyznaczania minimalnej listy blokad jest dwuprzebiegowy. Jako wynik zwraca listę list, dla każdego spójnego zakresu wyznaczając minimalny podzbiór blokad zakresu pokrywający spójny obszar. Kod z rys. 6 zawiera eksperymentalną implementację. Pierwszy przebieg (oznaczony komentarzem Å{1}) obejmuje posortowanie blokad rosnąco względem początków oraz przegląd posortowanej listy w celu wyznaczenia minimalnych długości ciągów zakresów pokrywających zakres spójny. Długość ta jest przechowywana w pomocniczym polu pred. Zakres wyznaczający początek obszaru spójnego ma w tym polu liczbę 0. Drugi przebieg (Å{2}) przegląda zakresy w porządku malejącym, tym razem względem końców zakresów. Każdorazowo znajdowany jest poprzednik na liście minimalnej lub początek zakresu spójnego. Kluczowa jest w tym przypadku instrukcja (Å{3}), ponieważ warunek może być spełniony wielokrotnie 236 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych każdorazowo można więc zastosować dodatkowe kryteria wyboru oparte o informacje przekazane menedżerowi przez transakcje. Wykorzystanie możliwości zamiany ostatniego zakresu w minimalnym pokryciu wymaga drobnej modyfikacji zamieszczonego kodu. public static List<List<XmlNodeRangeLock>> MinCover(List<XmlNodeRangeLock> rangeLocks) { List<XmlNodeRangeLock> sortedRangeLocks= SortByLeftAsc(rangeLocks); w w foreach (XmlNodeRangeLock xnrl in sortedRangeLocks) //Å{1} { if(xnrl.pred==int.MaxValue) xnrl.pred = 0; foreach(XmlNodeRangeLock xnrl1 in GetSuccessors(xnrl, sortedRangeLocks)) nrl1.pred =min( xnrl.pred + 1,xnrl1.pred); } } da .b w sortedRangeLocks = SortByRightDesc(rangeLocks); //Å{2} List<List<XmlNodeRangeLock>> set = new List<List<XmlNodeRangeLock>>(); List<XmlNodeRangeLock> range = null; int pred = 0; foreach (XmlNodeRangeLock xnrl in sortedRangeLocks) { if (pred == 0) { range = new List<XmlNodeRangeLock>(); set.Add(range); range.Add(xnrl); } else if (pred == xnrl.pred + 1)// Å{3} range.Add(xnrl); pred = xnrl.pred; } return set; Rys. 6. Algorytm rozszerzony pl s. Poprawność algorytmu rozszerzonego wynika z faktu, że jest on pewnym szczególnym zastosowaniem schematu Dijkstry używanego do wyznaczania minimalnych dróg w grafach. Zadanie znalezienia minimalnego pokrycia zakresu daje się bowiem zakodować jako problem wyznaczenia drogi minimalnej długości w grafie o równych wagach (długościach) krawędzi. W tym przypadku pojedyncze zakresy odpowiadają wierzchołkom. Krawędzie łączą te wierzchołki, których odpowiadające im zakresy mają część wspólną. Zauważmy jednak, że znajdowanie minimalnego pokrycia nie jest izomorficzne z zadaniem znalezienia drogi o minimalnej długości (używając terminologii algebry problem jest monomorficzny [6]) Odnośnie złożoności obliczeniowej możemy zauważyć, że stosują się w tym przypadku wszystkie ustalenia dotyczące algorytmu Dijkstry (por.[7]) .Wynosi ona nlog(n), gdzie n oznacza liczbę wierzchołków (w tym przypadku blokad zakresów). Konieczność dwukrotnego posortowania zakresów występuje tylko w implementacji eksperymentalnej, ponieważ menedżer blokad (co już wielokrotnie podkreślaliśmy) i tak utrzymuje pomocniczy indeks zawierający identyfikatory zablokowanych obiektów. Indeks ten może być dodatkowo wykorzystywany do celów generowania listy minimalnej. Jednakże nawet w przypadku menedżera eksperymentalnego lub menedżera zarządzającego zbiorami blokad w inny 237 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 A. Sikorski sposób złożoność obliczeniowa jest ta sama, ponieważ sortowanie ma również rząd złożoności obliczeniowej nlog(n). 6 Wnioski w Idea wykorzystania etykiet węzłów została przez nas przetestowana w ramach eksperymentalnej implementacji rodzimego systemu zarządzania bazą danych XML. Architektura eksperymentalnego systemu oparta została na pomyśle przedstawionym w [11], gdzie zaproponowano wykorzystanie biblioteki MSXML2 w charakterze procesora zapytań oraz menedżera danych. Jako podstawowy tryb pracy przyjęliśmy poziom izolacji, w którym modyfikowane węzły są blokowane w trybie wyłącznym natomiast ścieżki do nich wiodące w trybie współdzielonym. Jak łatwo zauważyć koszt zablokowania węzła wraz ze ścieżką jest równy kosztowi wstawienia pojedynczego obiektu do indeksu. Etykietowanie węzłów w implementacji eksperymentalnej oparliśmy na pomysłach mających swoje źródła w pochodzących z lat 80-tych pracach Tarjana i Willarda [12], [13], [14]. Wymienieni autorzy uzyskali wówczas interesujące wyniki dotyczące indeksowania danych za pomocą etykiet pozwalających na wstawianie nowych obiektów bez konieczności ponownego etykietowania lub z etykietowaniem o koszcie ograniczonym przez stałą. Zagadnień tych nie omawiamy, gdyż do wyłożenia proponowanej idei zarządzania blokadami wystarcza by etykiety dały się liniowo uporządkować. Dalsze prace nad eksperymentalnym systemem obejmują wsparcie dla MGL oraz zbadanie przydatności przetwarzania wstępnego na poziomie pojedynczych transakcji. Zbiory pokrywające wyznaczone dla blokad założonych przez jedną transakcję mogą być wykorzystane przez mechanizm eskalacji blokad, gdyż zbiór blokad zakresów tworzących spójny obszar może być zastąpiony pojedynczą blokadą. Konsolidacja zakresów może być realizowana na bieżąco – menedżer blokad sprawdza wtedy, czy żądanie założenia nowej blokada dotyczy zakresu już zablokowanego, czy też żądanie to częściowo z takim zakresem się pokrywa. W pierwszym przypadku można uznać żądanie za spełnione, w drugim przypadku menedżer sprawdza czy jest możliwe rozszerzenie blokady i następnie, w przypadku pozytywnym, aktualizuje odpowiednio swój stan. da .b w w 1. 2. 3. 4. 5. 6. 7. 8. pl s. Literatura Bernstein P.A., Hadzilacos V., Goodman N.: Concurrency Control and Recovery in Database Systems Addison-Wesley, 1987. Gray J., Reuter A.: Transaction Processing, Concepts and Techniques, Morgan Kaufmann Publisher, San Francisco, CA 94104-3205, USA, 2000. Helmer S., Kanne C.-C., Moerkotte G.: Evaluating lock-based protocols for cooperation on XML documents, ACM SIGMOD Record, v.33 n.1, March 2004. Jagadish H.V. et al.: A Native XML Database, VLDB Journal 11/4, 2002, p. 274-291. Al-Khalifa S., Jagadish H.V, Koudas N., Patel J.M., Srivastava D., Wu Y: A Primitive for Efficient XML Query Pattern Matching, Proceedings of the 18th International Conference on Data Engineering, IDCE’02. Lidl R.: Algebra dla przyrodników i inżynierów, PWN, Poznań, 1983. Lipski W.: Kombinatoryka dla programistów, WNT Warszawa, 1989. Moerkotte G.: Anatomy of a Native XML Base Management System, VLDB Journal 11/4, 2002, p. 292-314. 238 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Blokowanie ścieżki i poddrzewa w hierarchicznych zasobach danych 9. 10. 11. 12. w 13. O’Neil P. et al.: ORDPATHs: Insert-Friendly XML Node Labels, SIGMOD, Paris, 2004, p. 903908. Rusinkiewicz M. e al.: Towards a Cooperative Transaction Model – The Cooperative Activity Model, Proceedings of the 21th VLDB Conf. Zurich, 1995. Sikorski A.: Menedżer blokad protokołu B2F dla baz danych XML, Systemy Czasu Rzeczywistego, Karpacz, 2007. Sleator D.D., Tarjan R.E.: Amortized Efficiency of List Updates and Paging Rules, CACM 28(2), February 1985. Tarjan R.E.: Data Structures and Network Algorithms, Society for Industrial and Applied Mathematics, Philadelphia, PA 1983. Willard. D.E.: Maintaining dense sequential files in a dynamic environment, Proc. 14th ACM STOC, May 1982. Wu X., Lee M.L., Hsu W.: A Prime Number Labeling Scheme for Dynamic Ordered XML Trees, Conference on Data Engineering, 2004. 14. 15. da .b w w pl s. 239 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 w da .b w w pl s. (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008