Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Domknięcie przechodnie (również) w bazach danych

Podobne prezentacje


Prezentacja na temat: "Domknięcie przechodnie (również) w bazach danych"— Zapis prezentacji:

1 Domknięcie przechodnie (również) w bazach danych
Andrzej Topolewski slajdów 16+1

2 Co to jest domknięcie przechodnie
Dwa źródła pojęcia: teoria grafów, teoria mnogości Relacja binarna R R(A,B), R(B,C), R(C,D) R(A,B), R(B,C), R(C,D) R(A,C), R(B,D), R(A,D) Graf domknięcia przechodniego dla G to najmniejszy graf, który zawiera G i jeśli istnieje w G (równoważne: w domknięciu G) ścieżka P --> R to w domknięciu istnieje krawędź (P, R) Domknięcie relacji R, to najmniejsza relacja przechodnia zawierająca R. Warunek przechodniości relacji: R(A,B) ^ R(B,C) => R(A,C) Porządek określający element najmniejszy to liczność zbioru (krawędzi, elementów relacji) Domknięcie jest jednoznaczne.

3 Inne sformułowanie semantyki
Wynik procesu iteracyjnego ŚcieżkiNplus1 = COMPOSE(ŚcieżkiN, graf) Aby otrzymać domknięcie możemy zsumować ścieżki kolejno długości 2, 3, N N - maksymalna długość ścieżki, która nie może być zredukowana o cykl. Aby obliczyć krok iteracji nie musimy znać całego grafu - wystarczy sposób na tworzenie zbioru ścieżek o 1 dłuższych. Pozwala to na większą elastyczność - dane+warunek złączenia = graf Delta-iteracja: wykorzystanie poprzedniego wyniku daje kolejny przyrost Domknięcie = G + COMPOSE(G,G) + COMPOSE(COMPOSE(G,G), G) + ...

4 Jeszcze inaczej: Rozwiązanie równania stałopunktowego
Domknięcie = Graf  COMPOSE(Domknięcie, Graf) Suma zbiorów?, wielozbiorów? Co jest typem wyniku? Graf domknięcia ma tą własność, że już się nie da domknąć (domknięcie jest identyczne z nim) Jest to jednocześnie wyrażenie rekursji Równanie stałopunktowe jest deklaratywnym wyrażeniem semantyki. Domknięcie daje się integrować z językami zapytań i optymalizować. Procedury rekurencyjne mogą wyrazić to samo zapytanie, ale automatyczna optymalizacja nie jest możliwa.

5 Jak podać COMPOSE Definiujemy sposób integracji operatora z językiem
Schemat: Bezpośrednio<Od, Do, ...> CREATE VIEW Połączenie AS DISTINCT FIXPOINT OF Bezpośrednio BY SELECT Połączenie.Od, Bezpośrednio.Do FROM Połączenie, Bezpośrednio WHERE Połączenie.Do = Bezpośrednio.Od Domknięcie = B  SELECT(B,B) as s1  SELECT(s1,B) as s2  ... Powstało wiele pomysłów jak dodać moc domknięcia przechodniego do istniejących języków zapytań. Propozycje dokonują różnych wyborów pomiędzy właściwościami operatora i proponują pewną składnię. Propozycja J.Edera: perspektywa, być może nieskończona SBQL: nie potrzeba integracji, ponieważ semantyka operatora jest spójna z zasadami języka i można tylko rozpatrywać modyfikatory We wzorze dla uproszczenia pominąłem przemianowywanie. Kropka jest tu jednym krokiem - obliczeniem drugiego zapytania w środowisku pierwszego. Drugie zapytanie tworzy wyrażenie COMPOSE otrzymując niejawnie środowisko (dostęp do poprzednio obliczonych danych) SBQL: (Bezpośrednio as P) closed unique by (Bezpośrednio where Od=P.Do) as P Domknięcie = B  B.(B where...)  B.(B where...).(B where...)  ...

6 Struktury wyrażające grafy, hierarchie
Zastosowania: Struktury wyrażające grafy, hierarchie Systemy transportowe, przepływy Systemy równoległe - zależności czasowe Konstrukcja parsera Hierarchie osób, elementów, dekompozycje BOM - Bill of Material W systemach reprezentujących połączenia oprócz bezpośredniej nawigacji zazwyczaj ścieżki też mają pewną interpretację, a domknięcie wyraża zbiór osiągalny przy pewnych warunkach, które możemy podać przy warunku złączenia. W systemach równoległych domknięcie może reprezentować zbiór stanów dopuszczalnych w danym momencie Przydaje się podczas konstrukcji automatu parsującego dla zadanej gramatyki Wszelkie hierarchie reprezentujące zależności lub zawieranie, gdzie pewna informacja jest rozproszona po elementach są naturalnym miejscem na zastosowanie operatora domknięcia. Domknięcie może wyrażać iteracyjny proces (select, update) po takiej hierarchii BOM - rachunek materiałowy w zastosowaniach produkcyjnych, przemysłowych np..: dekomponujemy wyrób trwały, dom, skomplikowany cykl produkcyjny.

7 Przemysłowe hierarchie
Zastosowania: BOM Przemysłowe hierarchie Najprostsze wyjaśnienie: dekompozycja produktu. Komplikacje: duża ilość parametrów Zalecenia standaryzacyjne Wplot w produkcję Element montowany z wielu innych ma zazwyczaj strukturę dekompozycyjną na wyróżnialne podelementy. Z każdym podelementem mogą być związane informacje jak ilość, pracochłonność, koszt itd... Nie muszą to być „rzeczy”, mogą być materiały Np.: restauracja (kubełek->skrzydełka->sos->musztarda->gorczyca) Element może mieć N cech (opcji) np.:długość, materiał. Istnieje więc cały zbiór zależności pomiędzy parametrami: np..:długość wpływa na koszt. APICS = American Production & Inventory Control Society APICS zdefiniowało szereg standardów i schematów obsługi BOM typu: zasady identyfikowania części (konkretne, czy schemat), modularyzacja struktur (podział na część wspólną dla wielu produktów i różną) obsługa zbiorów elemntów nie połąćzonych bezpośrednio. BOM może być połączony z informacją o procesie - operacje łączenia, kolejność, normy czasowe, kwalifikacje, kontrola jakości, równoległość Zależność procesu od efektu, opcji produktu.

8 Różne się możliwości i ich konsekwencje Definiowanie krawędzi
Warianty domknięcia: Różne się możliwości i ich konsekwencje Możliwości algorytmu Tylko obieg drzewa Domknięcie grafu Iteracja warstw Definiowanie krawędzi Złączenie naturalne Warunek złączenia Dostęp do ulotnych atrybutów Zabronienie cykli pozwala na uproszczenie algorytmu i skutecznie ogranicza rozmiar wyniku. Upraszcza semantykę iteracyjną. Domknięcie przechodnie dowolnego grafu utożsamia silnie spójne składowe i podaje zbiór wierzchołków osiągalnych. Iteracja daje największe możliwości - powtórzenia mogą generować nową informację. Złączenie naturalne: równość wybranych kolumn i projekcja na pozostałe Warunek: wyrażenie boolowskie obliczane na podstawie dostępnych atrybutów. Dostęp do ulotnych atrybutów: pozwala na generację danych o ścieżce (przyrostowo na podstawie poprzedniej informacji)

9 Warianty domknięcia (2):
Różne modyfikatory i postawienie zadania Modyfikacje semantyki Tylko różne (unique) Liście Iteracja imperatywna Sformułowanie zadania Complete TC Partial TC Iteracja z generowaniem „closed unique by” <> „unique (closed by)” leaves by - niepotrzebne wyniki pośrednie. Ortogonalne do unique Iteracja - wykonanie akcji (np..: update) dla każdego elementu wyniku Complete transitive closure - podać cały graf domknięcia, wszystkie pary (będące początkiem i końcem ścieżki) Partial transitive closure - podać domknięcie przechodnie (zbiór wierzchołków osiągalnych) zbioru początkowego. Łatwy przypadek - pojedynczy wierzchołek = przejście grafu z markowaniem = weak PTC czyli podać domknięcie jako zbiór strong PTC = podać dla każdego z osobna Iteracja z powodu generowania danych unikalnych dla każdej ścieżki nie może być optymalizowana

10 Domknięcie przechodnie w SBQL
Domknięcie buduje iteracyjnie wynik według podanego zapytania wykonywanego w środowisku obiektów początkowych Operator “closed by”: q1 closed by q2 1. q1 jest obliczane. Wynik jest przechowywany w tymczasowej tablicy T. 2. Dla każdego wiersza z tablicy T: a. Na stos środowisk odkładane jest nested(r). b. Obliczane jest zapytanie q2. Wynik q2 jest dodawany do T ponad iteracją. c. Ze stosu środowisk zdejmowana jest sekcja. Proces się kończy, gdy dla ostatniego wiersza T zapytanie q2 daje pustą tablicę. T zawiera wówczas końcowy wynik.

11 Domknięcie przechodnie w SBQL (2)
Cechy tej wersji operatora Działa tylko dla grafów acyklicznych Pozwala na generację informacji Charakter obliczeniowy - nie wydajnościowy Nie pozwala na rekursję nieliniową Rozpoczyna od dowolnego zbioru Operator nie broni się przed zapętleniem. Gdyby unikał zapętlenia to traciłby na ekspresji. Niektóre implementacje nie pozwalają na odwołanie się do nietrwałych atrybutów np..: „connect by” (Oracle) Brak możliwości optymalizacji - za to większe możliwości obliczania Niektórzy proponują dodatkowe informacje „INCreasing attribute” które miałyby służyć optymalizacji. Patrz przykłady zadań Większość propozycji pozwala użyć tylko trwałych ekstensji jako źródło domykanych danych. Nie jest to problemem - perspektywy. Jest to problemem- wydajność klasycznego „partial transitive closure”

12 Transitive Closure - przykład
Schemat: Wszystkie części składające się na silnik: (PART where NAME = “engine”) closed by (COMPOSITE. MadeFROM. USES. PART) Jak wyżej, zle tylko części podstawowe razem z ilością w silniku: (((PART where NAME = “engine”)  (1 as q)) closed by COMPOSITE. MadeFROM. ((USES. PART)  ((q * QUANTITY) as q))) where is_not_null(BASE) Całkowita masa silnika: sum((((PART where NAME = “engine”)  (1 as q)) closed by (COMPOSITE. MadeFROM. ((USES. PART)  ((q * QUANTITY) as q)))). ((COMPOSITE.MassINCREMENT  BASE.MASS) * q))

13 Procedura CostAndMass
Procedura może wyznaczać rekursywną perspektywę CostAndMass z wirtualnymi atrybutami name, cost, mass, i parametrem P (kolumna identyfikatorów części) Dla każdej części p w P wyznacza nazwę, całkowity koszt i całkowitą masę p. procedure CostAndMass( var P ) begin return P. ( (NAME as name )  ((BASE.COST  COMPOSITE. (AssemblyCOST + sum( MadeFROM .(QUANTITY * (CostAndMass(USES. PART).cost)))) as cost)  ((BASE.MASS  COMPOSITE. (MassINCREMENT + sum( MadeFROM .(QUANTITY * (CostAndMass(USES. PART).mass)))) as mass)) end CostAndMass; Jakie są możliwości automatycznej optymalizacji? Podobno są już stosowane techniki „method caching”. Na pewno lepiej zrobi to człowiek, choć czasem komputer może stwierdzić, że procedura nie ma efektów ubocznych. Koszt jednostki masy silnika: (CostAndMass(PART) where name = “engine”). (cost / mass)

14 Transitive Closure - przykład iteracji
Możliwość wykonywania iteracji mechanizmem domknięcia wartość := 1; numer_iteracji := 1; while numer_iteracji <= 9 { wartość := ( q()/wartość + wartość )/2; numer_iteracji := numer_iteracji + 1; } (1 as wartość)  (1 as numer_iteracji) closed by ((((q/wartość + wartość)/2) as wartość)  ((numer_iteracji+1) as numer_iteracji)) where numer_iteracji  9 Możliwość nazywania stałych (wyrażeń) i odwoływania się do tych nazw pozwala formułować dowolną iterację niekoniecznie odwołującą się do danych trwałych. Różnice w powyższych zapisach: q() - wywołanie funkcji zwracającej liczbę, q - zapytanie wynikiem zapytania są również wszystkie wyniki pośrednie

15 Zadania wymagające różnej mocy
podać firmy kontrolowane: Udział<posiadacz, posiadany, procent_udziałów> kontrola gdy >50%, kontroluje_bezpośrednio Dane jw. Firma jest kontrolowana, gdy posiadacz wspólnie z kontrolowanymi firmami posiada >50% Odległość<MiejsceA, MiejsceB, Ile> podać miejsca w promieniu 100 od „X” (unikalne) Czynnik<wartość>, podać kombinacje z powtórzeniami czynników o iloczynie < 100 1. Dana jest dodatkowa tablica kontroluje_bezpośrednio jako zbiór tych par, gdzie procent_udziałów>50 A jest kontrolowane przez B jeśli A posiada ponad 50% udziałów B lub A posiada firmę, która kontroluje B. Jest to klasyczna forma przechodniości. Najprostszy mechanizm wystarczy. 2. Tutaj aby sprawdzić czy A kontroluje B należy zsumować udziały A i kontrolowanych przez niego firm. Jest to dodatkowa iteracja po obliczonych dotychczas danych - rekursja nieliniowa. Rek. nieliniowa - zagnieżdżanie wywołań. Niemożliwe do wyrażenia operatorem domknięcia, a o ile się nie mylę to nawet niemożliwe do uzyskania pojedynczym zapytaniem SBQL. 3. Do liczenia odległości A od D konieczna jest generacja atrybutu „suma odległości” Nie zawsze dopuszczane. Dla uproszczenia unikalność. 4. W tym przypadku konieczne jest obsługiwanie cykli - liczby typu 3,5,7 mogą być w iloczynie wiele razy, a zwykłe domknięcie nie powtarza elementów.

16 Firmy słabo kontrolowane
Udział<posiadacz, posiadany, procent_udziałów> Firma jest kontrolowana, gdy posiadacz wspólnie z kontrolowanymi firmami posiada >50% CREATE VIEW posiada(posiadacz, posiadany) AS DISTINCT FIXPOINT OF bezpośrednio BY SELECT u1.posiadacz, u2.posiadany FROM udział AS u1, udział AS u2 WHERE 50 < (SELECT procent_udziałów FROM udział WHERE udział.posiadacz = u1.posiadacz AND udział.posiadany = u2.posiadany SELECT SUM(udziałPośrednio.ile) FROM posiada, udział AS udziałPośrednio WHERE u1.posiadacz = posiada.posiadacz AND posiada.posiadany = udziałPośrednio.posiadacz AND udziałPośrednio.posiadany = u2.posiadany) Zapytanie o słabo kontrolowane firmy jest możliwe do sformułowania jako perspektywa komponująca domknięcie przechodnie pierwotnej tabeli. Dlaczego? otóż w podzapytaniu została użyta sama nazwa perspektywy - daje to dodatkowe przeszukanie (selekcję) po częściowym wyniku. W swojej pracy autor po prostu stwierdza, że używanie jest zabronione. R. nieliniowa - wykładnicze zapytania.

17 Algorytmy obliczania domknięcia
Mnożenie macierzy lub chodzenie po grafie M - macierz incydencji, to M2 to macierz ścieżek dł. 2 Obliczanie grafu kondensacji + domykanie drzewa Przechodzenie wgłąb identyfikując sss Reprezentacja wyniku Mnożenie macierzy nie nadaje się do baz danych - reprezentacja rozrzutna, operacje zbyt globalne. Uzyskany rząd wielkości: oczekiwany - O(n^2) pesymistyczny - O(n^ *log(n)) Problem: unikanie zbędnych obliczeń, źródła nadmiarowości: silnie spójne składowe, inne. Lokalne usprawnienia Efektywna reprezentacja jest kluczowa - są lepsze niż listy incydencji


Pobierz ppt "Domknięcie przechodnie (również) w bazach danych"

Podobne prezentacje


Reklamy Google