Transcript wyklad04
Systemy zarządzania bazami danych 4. Haszowanie i więcej wymiarów Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 1 Haszowanie • klucz h(klucz) <klucz> . . . Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów Kubełki (zwykle 1 blok dysku) 2 Indeks haszowany wewnętrzny . . . (1) klucz h(klucz) Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów rekordy . . . 3 Indeks haszowany zewnętrzny (2) klucz h(klucz) klucz 1 rekord Indeks • Indeksy drugorzędne mogą by tylko zewnętrzne Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 4 Funkcja haszująca • Klucz = ‘x1 x2 … xn’ napis n-bajtowy • Liczba kubełków = b • h: dodaj x1 + x2 + ….. xn – weź sumę modulo b • To nie musi być dobra funkcja – Sztuka Programowania D. Knutha Tom 3 • Przy dobrej funkcji spodziewamy się podobnej wielkości każdego kubełka Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 5 Kubełek • Czy klucze mają być posortowane? • Tak, ale tylko wtedy gdy czas procesora jest krytyczny a wstawienia i usunięcia rekordów nie są zbyt częste Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 6 Strona nadmiarowa Wstawienie: h(a) = 1 h(b) = 2 h(c) = 1 h(d) = 0 0 d 1 a c 2 b e 3 h(e) = 1 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 7 Usuwanie Usuń: e f c 0 a 1 b c d e 2 3 Oryginał: Hector Garcia-Molina f g d Może przesunąć “g” w górę? 4. Haszowanie i więcej wymiarów 8 Przybliżona reguła pielęgnacji • Staraj się utrzymywać stopień wykorzystania między 50% a 80% Stopień ten to liczba zajętych pozycji liczba wszystkich pozycji • Jeśli < 50%, marnuje się miejsce • Jeśli > 80%, strony nadmiarowe groźne wszystko zależy od jakości funkcji i liczby rekordów na kubełek Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 9 Radzenie sobie ze wzrostem • Strony nadmiarowe i reorganizacje • Haszowanie dynamiczne • Rozszerzalne • Liniowe Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 10 Haszowanie rozszerzalne (a) Patrzymy na i spośród b bitów wyniku funkcji haszującej b h(K) 00110101 i rośnie z upływem czasu… Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 11 (b) Tworzymy katalog h(K)[i ] . . . do kubełka . . . Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 12 Przykład: h(k) ma 4 bity; 2 klucze/kubełek 1 0001 i= 1 i=2 00 01 1 2 1001 1010 1100 Wstaw 1010 Oryginał: Hector Garcia-Molina 1 2 1100 4. Haszowanie i więcej wymiarów 10 11 Nowy katalog 13 Kontynuacja przykładu i= 2 00 01 10 11 Wstaw: 0111 2 0000 0001 1 2 0001 0111 0111 2 1001 1010 2 1100 0000 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 14 Kontynuacja przykładu 0000 2 i= 2 0001 00 0111 2 01 10 11 Wstaw: 1001 Oryginał: Hector Garcia-Molina 1001 3 1001 1010 1001 2 3 1010 1100 2 4. Haszowanie i więcej wymiarów i=3 000 001 010 011 100 101 110 111 15 Usuwanie przy h. rozszerzalnym • Bez łączenie kubełków ALBO • Z łączeniem kubełków i zmniejszaniem katalogu jeśli to możliwe (Odwrotność wstawiania) • Odtwórz prezentację wstecz, żeby zobaczyć • Ale koszt wykrycia duży... Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 16 Haszowanie rozszerzalne + Obsługuje puchnące pliki + mniej reorganizując + bez pełnych reorganizacji – Pośredniość (Nieźle jeśli katalog mieści się pamięci, ale...) – Katalog zawsze rośnie dwukrotnie (Raz się mieści a raz nie) Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 17 Haszowanie liniowe Dwa pomysły: (a) Używaj i młodszych bitów funkcji b 01110101 wzrost i (b) Plik rośnie liniowo Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 18 Przykład b=4 bity, 0101 0000 1010 00 i =2, 2 klucze/kubełek • wstaw 0101 • mogą być strony nadmiarowe ! Kubełki na przyszly wzrost 0101 1111 01 10 11 m = 01 (najdalszy używany blok) Reg. Jeśli h(k)[i ] m, to szukaj w kubełku h(k)[i ] wpp, szukaj w kubełku h(k)[i ] - 2i -1 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 19 Przykład b=4 bity, 0101 0000 1010 00 i =2, 2 klucze/kubełek • wstaw 0101 0101 0101 1111 1010 1111 01 10 11 Kubełki na przyszly wzrost m = 01 (najdalszy blok) 10 11 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 20 Kontynuacja: Jak dalej ma rosnąć? i=2 3 0000 0 00 100 0101 0101 0 01 101 1010 010 110 0101 0101 1111 0 11 111 100 101 ... m = 11 (najdalszy blok) 100 101 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 21 Kiedy rozszerzać plik? • Operacja rozszerzenia jest niezależna od operacji wstawienia • Śledzimy stopień zapełnienia indeksu U • Jeśli U wzrosnie powyżej wartości granicznej, zwiększamy m (być może także i) Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 22 Haszowanie liniowe + Obsługuje puchnące pliki + marnując mniej miejsca + bez pełnych reorganizacji + Brak pośredniości (jak było przy rozszerzalnym) – Niestety dopuszcza strony nadmiarowe Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 23 Przypadek zły Bardzo pełne Bardzo puste Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów Zwiększanie m tylko spowoduje marnowanie miejsca 24 B+drzewo czy hasz? • Haszowanie dobre do zapytań równościowych SELECT * FROM R WHERE R.A = 5; • I tylko do nich. I do złączeń... równościowych Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 25 B+drzewo czy hasz? • B+drzewa dobre do zapytań zakresowych SELECT * FROM R WHERE R.A > 5; • Ale też równościowych • I do wielu innych rzeczy. I do złączeń równościowych/nierównościowych itd.. Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 26 Definicja indeksu w SQL • Create index nazw on rel (atr) • Create unique index nazwa on rel (atr) Tworzy klucz tabeli I pilnuje go! • Drop INDEX nazwa Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 27 Niestety, SQL... • Nie pozwala na specyfikację rodzaju (B+drzewo, Hasz, Bitmap, itd.) • Nie pozwala na specyfikację parametrów (wielkość tablicy, współczynnik zapełnienia, itd.) • Komercyjne SZBD na szczęście to mogą • Są też idenksy mieszane: zakresowo-haszowe Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 28 Indeks wielowymiarowy • Jeśli lista atrybutów jest dłuższa, to indeks jest na wielu kluczach CREATE INDEX foo ON R(bar1,bar2,bar3) • Zapytanie: Znajdź rekordy spełniające DEPT = “Toy” AND SAL > 50k Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 29 Strategia I • Weź jeden indeks, np. Dept. • Znajdź rekordy spełniające Dept = “Toy” i sprawdź ich SAL I1 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 30 Strategia II • Weź dwa indeksy, manipuluj wskaźnikami Toy Oryginał: Hector Garcia-Molina Sal > 50k 4. Haszowanie i więcej wymiarów 31 Strategia III • Użyj indeksu wielowymiarowego I2 I1 Oryginał: Hector Garcia-Molina I3 4. Haszowanie i więcej wymiarów 32 Przykład Art Sales Toy Indeks na DEPT 10k 15k 17k 21k 12k 15k 15k 19k Przykładowy rekord Name=Joe DEPT=Sales SAL=15k Indeks na SAL Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 33 Które zapytania obsłuży? • Indeks (DEPT, SAL) • • • • Znajdź Znajdź Znajdź Znajdź rekordy: rekordy: rekordy: rekordy: Oryginał: Hector Garcia-Molina Dept = “Sales” SAL=20k Dept = “Sales” SAL > 20k Dept = “Sales” SAL = 20k 4. Haszowanie i więcej wymiarów 34 Dane geograficzne Dane: y x Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów ... <X1,Y1, Atrybuty> <X2,Y2, Atrybuty > 35 Zapytania • Które miasto leży w punkcie <Xi,Yi>? • Co leży w odległości do 5 km od <Xi,Yi>? • Jaki obiekt jest najbliższy <Xi,Yi>? Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 36 Przykład 40 10 25 20 20 10 e h 30 20 15 35 i n o j k m 10 5 h i d e f 15 15 j k g l m c b f l a d c g 20 a b • Szukaj punktów bliskich f • Szukaj punktów bliskich b n o Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 37 Zapytania do takiego drzewa • • • • Znajdź Znajdź Znajdź Znajdź punkty punkty punkty punkty Oryginał: Hector Garcia-Molina takie, że Yi > 20 takie, że Xi < 5 “bliskie” i = <12,38> “bliskie” b = <7,24> 4. Haszowanie i więcej wymiarów 38 Indeks siatkowy klucz2 V1 V2 X1 X2 …… Xn klucz1 Vn Do rekordów, w których klucz1=V3, klucz2=X2 Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 39 Zalety • Można szybko znależć odpowiedzi: – klucz1 = Vi klucz2 = Xj – klucz1 = Vi – klucz2 = Xj • Także zakresowo…. – klucz1 Vi klucz2 < Xj Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 40 Indeksy siatkowe mają jednak pułapkę • Jak je ułożyć na dysku? V3 X1 X2 X3 X4 V2 X1 X2 X3 X4 X1 X2 X3 X4 Jak tablicę... V1 Problem: • Musi być regularna, żeby dało się wyliczyć pozycję z <Vi,Xj> Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 41 Rozwiązanie: Pośredniość V1 V2 V3 V4 X1 X2 X3 Kubełki Oryginał: Hector Garcia-Molina ---------- ---- Kubełki *Siatka zawiera jedynie wskaźniki na kubełki ---- 4. Haszowanie i więcej wymiarów 42 Dzięki pośredniości • Siatka może być regularna bez marnowania miejsca • Jest jednak pewna cena tej pośredniości... Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 43 Siatka może być też nad zakresami Salary Siatka 1 2 50K- 3 8 0-20K 20K-50K Skala liniowa Oryginał: Hector Garcia-Molina 1 2 3 Toy Sales Personnel 4. Haszowanie i więcej wymiarów 44 Pliki siatkowe + - Skuteczne wyszukiwanie wg wielu kluczy Narzuty i zarządzanie miejscem (nic nie jest za darmo) - Trzeba znaleźć podziały zakresu, które równo rozrzucają klucze Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 45 Partycjonowana f. haszująca 010110 1110010 klucz1 Oryginał: Hector Garcia-Molina h1 h2 4. Haszowanie i więcej wymiarów klucz2 46 Przykład: h1(toy) h1(sales) h1(art) . . h2(10k) h2(20k) h2(30k) h2(40k) . . Wstaw =0 =1 =1 =01 =11 =01 =00 000 001 010 011 100 101 110 111 <Fred> <Joe><Sally> <Fred,toy,10k>,<Joe,sales,10k> <Sally,art,30k> Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 47 h1(toy) =0 h1(sales) =1 h1(art) =1 . . h2(10k) =01 h2(20k) =11 h2(30k) =01 h2(40k) =00 . . • Znajdź Emp takich, Oryginał: Hector Garcia-Molina 000 001 010 011 100 101 110 111 <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> że Dept. = Sales Sal=40k 4. Haszowanie i więcej wymiarów 48 h1(toy) =0 h1(sales) =1 h1(art) =1 . . h2(10k) =01 h2(20k) =11 h2(30k) =01 h2(40k) =00 . . • Znajdź Emp takich, Oryginał: Hector Garcia-Molina 000 001 010 011 100 101 110 111 <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> że Sal=30k 4. Haszowanie i więcej wymiarów szukaj tu 49 h1(toy) h1(sales) h1(art) . . h2(10k) h2(20k) h2(30k) h2(40k) . . =0 =1 =1 =01 =11 =01 =00 000 001 010 011 100 101 110 111 <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> szukaj tu • Znajdź Emp takich, że Dept. = Sales Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 50