500 likes | 691 Views
Systemy zarządzania bazami danych. 4. Haszowanie i więcej wymiarów. Haszowanie. klucz h(klucz). < klucz >. Kubełki ( zwykle 1 blok dysku ). Indeks haszowany wewnętrzny. rekordy. (1) klucz h( klucz ). Indeks haszowany zewnętrzny. re k ord. (2) klucz h( klucz ). k lucz 1.
E N D
Systemy zarządzania bazami danych 4. Haszowanie i więcej wymiarów 4. Haszowanie i więcej wymiarów
Haszowanie • klucz h(klucz) <klucz> Kubełki (zwykle 1 blok dysku) . . . 4. Haszowanie i więcej wymiarów
Indeks haszowany wewnętrzny . . . rekordy (1) klucz h(klucz) . . . 4. Haszowanie i więcej wymiarów
Indeks haszowany zewnętrzny rekord (2) klucz h(klucz) klucz 1 Indeks • Indeksy drugorzędne mogą by tylko zewnętrzne 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
d a e c b Strona nadmiarowa Wstawienie: h(a) = 1 h(b) = 2 h(c) = 1 h(d) = 0 0 1 2 3 h(e) = 1 4. Haszowanie i więcej wymiarów
d Może przesunąć “g” w górę? Usuwanie Usuń:ef 0 1 2 3 a b d c c e f g 4. Haszowanie i więcej wymiarów
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 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 4. Haszowanie i więcej wymiarów
Rozszerzalne • Liniowe Radzenie sobie ze wzrostem • Strony nadmiarowe i reorganizacje • Haszowanie dynamiczne 4. Haszowanie i więcej wymiarów
Haszowanie rozszerzalne • Patrzymy na i spośród b bitów wyniku funkcji haszującej b h(K) i rośnie z upływem czasu… 00110101 4. Haszowanie i więcej wymiarów
(b) Tworzymy katalog h(K)[i ] do kubełka . . . . . . 4. Haszowanie i więcej wymiarów
i = 2 00 01 10 11 1 1 2 1010 Nowy katalog 2 1100 Przykład: h(k) ma 4 bity; 2 klucze/kubełek 1 0001 i = 1 1001 1100 Wstaw 1010 4. Haszowanie i więcej wymiarów
2 0000 0001 2 0111 2 2 Kontynuacja przykładu i = 2 00 01 10 11 1 0001 0111 1001 1010 Wstaw: 0111 0000 1100 4. Haszowanie i więcej wymiarów
i = 3 000 001 010 011 100 101 110 111 3 1001 1001 2 1001 1010 3 1010 1100 2 Kontynuacja przykładu 0000 2 0001 i = 2 00 01 10 11 0111 2 Wstaw: 1001 4. Haszowanie i więcej wymiarów
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... 4. Haszowanie i więcej wymiarów
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) 4. Haszowanie i więcej wymiarów
Dwa pomysły: b (a) Używajimłodszych bitów funkcji 01110101 wzrost i (b) Plik rośnie liniowo Haszowanie liniowe 4. Haszowanie i więcej wymiarów
0101 • mogą być strony nadmiarowe ! Jeśli h(k)[i ] m, to szukaj w kubełku h(k)[i ] wpp, szukaj w kubełku h(k)[i ]- 2i -1 Reg. Przykładb=4 bity, i =2, 2 klucze/kubełek • wstaw 0101 00 01 10 11 Kubełki na przyszly wzrost 0000 0101 1010 1111 m = 01 (najdalszy używany blok) 4. Haszowanie i więcej wymiarów
0101 • wstaw 0101 1010 1111 0101 10 11 Przykładb=4 bity, i =2, 2 klucze/kubełek 00 01 10 11 Kubełki na przyszly wzrost 0000 0101 1010 1111 m = 01 (najdalszy blok) 4. Haszowanie i więcej wymiarów
3 0101 0101 101 100 0 0 0 0 100 101 110 111 100 101 Kontynuacja:Jak dalej ma rosnąć? i = 2 00 01 10 11 0000 0101 1010 1111 0101 . . . m = 11 (najdalszy blok) 4. Haszowanie i więcej wymiarów
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) 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
Przypadek zły Bardzo pełne Bardzo puste Zwiększanie m tylko spowoduje marnowanie miejsca 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
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.. 4. Haszowanie i więcej wymiarów
Definicja indeksu w SQL • Createindex nazw on rel (atr) • Createuniqueindex nazwa on rel (atr) Tworzy klucz tabeli I pilnuje go! • Drop INDEX nazwa 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
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 4. Haszowanie i więcej wymiarów
Strategia I • Weź jeden indeks, np. Dept. • Znajdź rekordy spełniające Dept = “Toy” i sprawdź ich SAL I1 4. Haszowanie i więcej wymiarów
Strategia II • Weź dwa indeksy, manipuluj wskaźnikami Toy Sal > 50k 4. Haszowanie i więcej wymiarów
Strategia III • Użyj indeksu wielowymiarowego I2 I3 I1 4. Haszowanie i więcej wymiarów
Art Sales Toy Przykład 10k 15k Przykładowy rekord Indeks na DEPT Indeks na SAL 17k 21k Name=Joe DEPT=Sales SAL=15k 12k 15k 15k 19k 4. Haszowanie i więcej wymiarów
Które zapytania obsłuży? • Indeks (DEPT, SAL) • Znajdź rekordy: Dept = “Sales” SAL=20k • Znajdź rekordy: Dept = “Sales” SAL > 20k • Znajdź rekordy: Dept = “Sales” • Znajdź rekordy: SAL = 20k 4. Haszowanie i więcej wymiarów
Dane geograficzne Dane: <X1,Y1, Atrybuty> <X2,Y2, Atrybuty > y . . . x 4. Haszowanie i więcej wymiarów
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>? 4. Haszowanie i więcej wymiarów
40 30 10 20 20 m g b n h o d e a k c f j l i 10 25 15 35 20 10 20 5 d e h i g f c a b 15 15 • Szukaj punktów bliskich f • Szukaj punktów bliskich b n o j k m l Przykład 4. Haszowanie i więcej wymiarów
Zapytania do takiego drzewa • Znajdź punkty takie, że Yi > 20 • Znajdź punkty takie, że Xi < 5 • Znajdź punkty “bliskie” i = <12,38> • Znajdź punkty “bliskie” b = <7,24> 4. Haszowanie i więcej wymiarów
Indeks siatkowy klucz2 X1 X2 …… Xn V1 V2 klucz1 Vn Do rekordów,w których klucz1=V3, klucz2=X2 4. Haszowanie i więcej wymiarów
Zalety • Można szybko znależć odpowiedzi: • klucz1 = Vi klucz2 = Xj • klucz1 = Vi • klucz2 = Xj • Także zakresowo…. • klucz1 Viklucz2 < Xj 4. Haszowanie i więcej wymiarów
V1 V2 V3 X1 X1 X1 Jak tablicę... X2 X2 X2 X3 X3 X3 X4 X4 X4 • Jak je ułożyć na dysku? Indeksy siatkowe mają jednak pułapkę Problem: • Musi być regularna, żeby dało się wyliczyć pozycję z <Vi,Xj> 4. Haszowanie i więcej wymiarów
Rozwiązanie: Pośredniość X1 X2 X3 Kubełki V1 V2 V3*Siatka zawiera V4 jedynie wskaźniki na kubełki Kubełki -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 4. Haszowanie i więcej wymiarów
Dzięki pośredniości • Siatka może być regularna bez marnowania miejsca • Jest jednak pewna cena tej pośredniości... 4. Haszowanie i więcej wymiarów
Siatka może być też nad zakresami Salary Siatka 0-20K 1 20K-50K 2 50K- 3 8 Skala liniowa 1 2 3 Toy Sales Personnel 4. Haszowanie i więcej wymiarów
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 + - - 4. Haszowanie i więcej wymiarów
Partycjonowana f. haszująca 010110 1110010 klucz1 klucz2 h1 h2 4. Haszowanie i więcej wymiarów
<Fred> <Joe><Sally> Przykład: h1(toy) =0 000 h1(sales) =1 001 h1(art) =1 010 . 011 . h2(10k) =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111 . . <Fred,toy,10k>,<Joe,sales,10k> <Sally,art,30k> Wstaw 4. Haszowanie i więcej wymiarów
h1(toy) =0 000 h1(sales) =1 001 h1(art) =1 010 . 011 . h2(10k) =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111 . . • Znajdź Emp takich, że Dept. = Sales Sal=40k <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> 4. Haszowanie i więcej wymiarów
szukaj tu h1(toy) =0 000 h1(sales) =1 001 h1(art) =1 010 . 011 . h2(10k) =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111 . . • Znajdź Emp takich, że Sal=30k <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> 4. Haszowanie i więcej wymiarów
szukaj tu h1(toy) =0 000 h1(sales) =1 001 h1(art) =1 010 . 011 . h2(10k) =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111 . . • Znajdź Emp takich, że Dept. = Sales <Fred> <Joe><Jan> <Mary> <Sally> <Tom><Bill> <Andy> 4. Haszowanie i więcej wymiarów