0-0-6 PLAN WYKŁADU Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew BAZY DANYCH Wykład 9 dr inż. Agnieszka Bołtuć INDEKSY - DEFINICJE Indeksy to pomocnicze struktury dostępowe, używane w celu przyspieszenia pobierania rekordów z pliku, Oferują dostęp do rekordów bez wpływania na ich fizyczne rozmieszczenie na dysku, Do tworzenia indeksów wykorzystywane jest pole indeksujące które może być dowolnym polem w pliku, Dla danego pliku może być skonstruowanych wiele indeksów na wielu polach, Mechanizm porównywalny do indeksów dołączanych na końcach książek, INDEKSY - DEFINICJE Rodzaje indeksów: jednopoziomowe, wielopoziomowe, Rodzaje indeksów: zagęszczone, rzadkie, Rodzaje struktur: pliki uporządkowane, struktury drzewiaste,
0-0-6 INDEKSY JEDNOPOZIOMOWE Indeks przechowuje wartości pola indeksującego oraz wskaźniki na bloki w których te pola się znajdują, wartości w indeksie są uporządkowane dlatego można tu stosować wyszukiwanie binarne, Rodzaje indeksów jednopoziomowych uporządkowanych: główny (podstawowy), klastrowania (zgrupowany), drugorzędny (wtórny). INDEKS GŁÓWNY Nałożony na atrybucie klucza podstawowego pliku uporządkowanego, Indeks główny to plik uporządkowany zawierający rekordy złożone z dwóch pól: pierwsze ma typ ten sam co klucz, drugie to wskaźnik na blok dyskowy, Wpis do indeksu można określić jako parę <K(i),P(i)> Rozmiar indeksu jest taki sam jak liczba bloków w pliku, Pierwszy z rekordów danego bloku nazywamy rekordem zaczepienia, zaczepieniem bloku lub kotwicą bloku, Plik danych z kluczem głównym INDEKSY ZAGĘSZCZONE I RZADKIE Indeks zagęszczony zawiera wpis dla każdej wartości klucza wyszukiwania czyli dla każdego rekordu, Indeks niezagęszczony posiada wpis jedynie dla niektórych wartości wyszukiwania (np. bloków), INDEKS GŁÓWNY Plik indeksu punkt zaczepienia wskaźnik Adamczyk Anwert Aztek Zaktorski Adamczyk Afon Agnelli Anwert Ampok Awert Aztek Azwok Azyl Zaktorski Zkotar Zylton
0-0-6 INDEKS GŁÓWNY Zalety: Mniej jednostek niż w pliku z danymi: tylko rekordy zaczepienia oraz mniej pól rekordów, Efektywniejsze wyszukiwanie binarne: średni koszt log b. Wady: Duży koszt wstawiania, usuwania i modyfikacji. INDEKS KLASTROWANIA Nałożony na atrybucie nie będącym kluczem podstawowym pliku uporządkowanego (nieunikatowym), Pole takie nazywamy polem klastrowania, Indeks klastrowania to plik uporządkowany z dwoma polami: pierwsze ma ten sam typ co pole klastrowania, drugie wskaźnik, Indeks zawiera wpis do każdej odrębnej wartości klastrowania oraz wskaźnik na pierwszy blok do którego ona należy, Jest indeksem rzadkim, Wady i zalety te same co w przypadku indeksu głównego, INDEKS KLASTROWANIA Plik indeksu Plik danych z polem klastrownia INDEKS KLASTROWANIA Z BLOKAMI NADMIAROWYMI Plik indeksu Plik danych z polem klastrowania wskaźnik na blok Null Wartość pola klastrowania wskaźnik Wartość pola klastrowania wskaźnik wskaźnik na blok Null 6 wskaźnik na blok 6 wskaźnik na blok Null
0-0-6 INDEKS DRUGORZĘDNY Można nałożyć na pole które ma unikatowe wartości w każdym rekordzie lub które nie jest polem klucza i posiada powtarzające się wartości, Jest plikiem uporządkowanym o dwóch polach: jedno jest tego typu co wybrane pole nie będące polem uporządkowania pliku (pole indeksujące), drugie wskaźnikiem na blok lub rekord, Dla jednego pliku może być wiele indeksów drugorzędnych, Jest indeksem zagęszczonym, INDEKS DRUGORZĘDNY (POLE KLUCZA) Plik danych z polem indeksowania Plik indeksu Wartość pola indeksu 6 wskaźnik wskaźniki we wpisach indeksu są wskaźnikami na bloki 6 6 6 9 9 0 7 INDEKS DRUGORZĘDNY (POLE NIE BĘDĄCE POLEM KLUCZA) Plik danych z polem indeksowania poziom pośredni Plik indeksu Wartość wskaźnik pola INDEKSY WIELOPOZIOMOWE Celem wprowadzenia takiego indeksu jest redukcja kosztów przeszukiwania, Idea indeksu wielopoziomowego bazuje na redukcji o tyle razy ile wynosi współczynnik blokowania bfr i, przeszukiwanie indeksu wielopoziomowego wymaga średnio log bfri b i dostępów do bloków pliku indeksowego, Indeks składa się z wielu poziomów: poziom pierwszy (podstawowy) to plik uporządkowany z różnymi wartościami K(i),
0-0-6 INDEKSY WIELOPOZIOMOWE Dla pierwszego poziomu możemy stworzy indeks podstawowy, nazywamy go indeksem drugiego poziomu, Tę samą procedurę można powtarzać dla drugiego poziomu i tworzy się trzeci, Liczba poziomów w indeksie wielopoziomowym (ostatni poziom zwany szczytowym t): t= log bfri (r ), gdzie r to liczba wpisów na poziomie pierwszym, Indeksy wielopoziomowe można konstruować z wykorzystaniem indeksów podstawowych, wtórnych i zgrupowanych, pod warunkiem, że indeks I poziomu ma różne wartości dla K(i) i rekordy stałej długości. INDEKSY WIELOPOZIOMOWE Poziom pierwszy 8 Poziom drugi 9 8 6 7 80 8 Plik danych z polem klucza głównego 8 9 6 9 6 ISAM ISAM Jedną z fundamentalnych koncepcji indeksu wielopoziomowego jest struktura ISAM (ang. Indexed Sequential Access Method) opracowana przez IBM, zbudowana jest z dwóch poziomów. Poziom pierwszy indeksuje cylindry. Rekordy indeksu zawierają pary wartości: poszukiwany klucz i adres do indeksu ścieżki dyskowej. Poziom drugi indeksuje ścieżki. Jego rekordy zawierają pary wartości: poszukiwany klucz i adres ścieżki. Rozwinięciem struktury ISAM jest VSAM (ang. Virtual Sequential Access Method). VSAM jest już niezależna od rozwiązań sprzętowych. ISAM jest indeksem statycznym, co oznacza, że nie posiada zaawansowanych mechanizmów modyfikowania struktury w sytuacji zmodyfikowania zawartości indeksowanego pliku (dodanie, zmodyfikowanie, usunięcie rekordu), Usunięcie rekordu powoduje powstanie pustego miejsca w bloku indeksu, zaś nowe rekordy są dodawane do bloków przepełnienia. W ostateczności struktura indeksu typu ISAM staje się nieefektywna, dlatego wprowadza się tzw. dynamiczny indeks wielopoziomowy implementowany najczęściej w postaci drzew.
0-0-6 B-DRZEWA I B + -DRZEWA - WPROWADZENIE DRZEWO WYSZUKIWANIA B-drzewa i B + -drzewa stanowią przypadki znanych struktur drzewiastych, Drzewo składa się z wierzchołków, każdy wierzchołek (oprócz korzenia) ma jeden wierzchołek nadrzędny i kilka podrzędnych, Wierzchołek który nie posiada wierzchołków podrzędnych nazywamy liściem, Poziom wierzchołka jest o jeden większy niż poziom nadrzędnego, zaś korzeń ma poziom zerowy, Poddrzewo to składa się z wybranego wierzchołka oraz wszystkich jego wierzchołków podrzędnych, Jest specjalnym typem drzewa, wykorzystywanym do wyszukiwania rekordów, mając daną wartość jednego z jego pól, Drzewo wyszukiwania rzędu p nazywamy takie drzewo, że każdy wierzchołek tego drzewa, Posiada co najwyżej p wartości szukanych i p wskaźników w porządku < P, K, P, K,..., Pq-, Kq-, Pq >, gdzie q <= p, Każde Pi jest wskaźnikiem pustym lub wskaźnikiem do poddrzewa, zaś Ki jest wartością wyszukiwaną. DRZEWO WYSZUKIWANIA - WIERZCHOŁEK DRZEWO WYSZUKIWANIA - PRZYKŁAD P K Ki- Pi Ki Kq- Pq * * * 6 * 9 * x x x X<K Ki-<X<Ki Kq-<X Ograniczenia: w wierzchołku K<K<<Kq-, dla wszystkich wartości X w poddrzewie wskazywanym przez Pi spełnione jest Ki- < X < Ki (dla < i < q), X<Ki (dla i=) oraz Ki- < X (dla i = q). 7 8 * Wskaźnik na wierzchołek Wskaźnik pusty 6
0-0-6 DRZEWO WYSZUKIWANIA - CECHY Nie jest drzewem zrównoważonym, Wiele operacji przy przeszukiwaniu drzewa, Po usunięciu rekordu niektóre wierzchołki mogą być prawie puste co powoduje marnowanie przestrzeni i zwiększenie liczby poziomów, B-DRZEWO Posiada ograniczenia powodujące fakt stałego zrównoważenia oraz że przestrzeń powstająca po usuwaniu nie jest duża, Algorytmy wstawiania i usuwania są dosyć skomplikowane, gdyż muszą spełniać nałożone ograniczenia, Te problemy rozwiązuje B-drzewo. B-DRZEWO RZĘDU P - DEFINICJA Każdy wierzchołek wewnętrzny w drzewie ma postać: <P, <K,Pr>, P, <K,Pr>,,<Kq-,Prq->,Prq>, gdzie q<=p. Każde Pi to wskaźnik drzewa na inny wierzchołek, zaś Pri wskaźnik danych na rekord (lub blok) o wartości pola klucza Ki, w wierzchołku K<K<<Kq-, dla wszystkich wartości X w poddrzewie wskazywanym przez Pi mamy Ki- < X < Ki (dla < i < q), X<Ki (dla i=) oraz Ki- < X (dla i = q). B-DRZEWO - DEFINICJA Każdy wierzchołek posiada najwyżej p wskaźników drzewa, Każdy wierzchołek (oprócz korzenia i liścia) posiada co najmniej p/ wskaźników drzewa, korzeń posiada ich co najmniej dwa, Wierzchołek o q wskaźnikach drzewa, gdzie q<=p, posiada q- wartości pola klucza wyszukiwania, Wszystkie liście znajdują się na tym samym poziomie. 7
0-0-6 B-DRZEWO - WIERZCHOŁEK B-DRZEWO - PRZYKŁAD P K Pr P Ki- Pri- Pi Ki Pri Kq- Prq- Pq * * * o 8 o wskaźnik drzewa wskaźnik danych * * * o o * * * 6 o 7 o * * * 9 o o x x x X<K Ki-<X<Ki Kq-<X * Wskaźnik na wierzchołek Wskaźnik pusty Kolejność wstawiania elementów: 8,,,7,,,9,6 o Wskaźnik danycho B + -DRZEWO Modyfikacja B-drzewa, Wskaźniki danych przechowywane są tylko w liściach, Liście przechowują wpis dla każdej wartości pola wyszukiwania wraz ze wskaźnikiem danych na rekord (lub blok), B + -DRZEWO RZĘDU P DEFINICJA WIERZCHOŁKÓW Każdy wierzchołek wewnętrzny w drzewie ma postać: <P, K, P, K,, Pq-, Kq-, Pq>, gdzie q<=p, zaś każde Pi to wskaźnik drzewa, W wierzchołku K<K<<Kq-, Dla wszystkich wartości X w poddrzewie wskazywanym przez Pi mamy Ki- < X < Ki (dla < i < q), X<=Ki (dla i=) oraz Ki- < X (dla i = q), 8
0-0-6 B + -DRZEWO RZĘDU P DEFINICJA WIERZCHOŁKÓW Każdy wierzchołek wewnętrzny posiada najwyżej p wskaźników drzewa. Każdy wierzchołek wewnętrzny (oprócz korzenia i liści) posiada co najmniej p/ wskaźników drzewa, korzeń posiada ich co najmniej dwa, Wierzchołek o q wskaźnikach drzewa, gdzie q<=p, posiada q- wartości pola klucza wyszukiwania. B + -DRZEWO RZĘDU P DEFINICJA LIŚCI Każdy wierzchołek typu liść w drzewie ma postać: <<K, Pr>, <K, Pr>,, <Kq-, Pq->, Pnast>, gdzie q<=p, zaś każde Pri to wskaźnik danych, Pnast wskazuje na następny wierzchołek liścia, W wierzchołku K<K<<Kq-, dla q<=p, Każde pri jest wskaźnikiem danych wskazującym na rekord (lub blok), którego wartość pola wyszukiwania jest równa Ki, B + -DRZEWO RZĘDU P DEFINICJA LIŚCI Każdy wierzchołek liścia posiada co najmniej p/ wskaźników drzewa, Wszystkie wierzchołki liści znajdują się na tym samym poziomie. B + -DRZEWO WIERZCHOŁKI I LIŚCIE P K Ki- Pi Ki Kq- Pq wskaźnik drzewa wskaźnik drzewa x x x X<=K Ki-<X<=Ki Kq-<X K Pr K Pr Ki Pri Kq- Prq- Pnast wskaźnik danych 9
0-0-6 B + -DRZEWO - PRZYKŁAD * Wskaźnik na wierzchołek Wskaźnik pusty B + -DRZEWO - OPERACJE * * * * * 7 * 8 * o o * o * 6 o 7 o * 8 o * 9 o o o Wskaźnik danych Algorytm dodawania do drzewa: Rozpoczynając od korzenia znajdujemy właściwy liść i umieszczamy tam wartość Jeśli wierzchołek liścia jest pełny i dodanie wartości do liścia powoduje przepełnienie to dzielimy go, pozostawiamy początkowe j = ceiling((p liść + ) / ) wartości w liściu, a pozostałe przenosimy do nowego liścia, j-tą wartość powielamy w węźle nadrzędnym, jeśli przeniesienie wartości do węzła nadrzędnego powoduje przepełnienie, to pozostawiamy początkowe j = floor((p + ) / ) wartości w węźle, a pozostałe przenosimy do nowego węzła, j-tą wartość przenosimy do węzła nadrzędnego B + -DRZEWO - OPERACJE DODAWANIE DO B + -DRZEWA Algorytm usuwania: wartości usuwamy zawsze na poziomie liści, wtedy wartość z lewej w liściu zastępuje wartość w wierzchołku, jeśli wypełnienie liścia spadnie poniżej p/ to znajdź siostrzany wierzchołek liścia bezpośrednio z lewej (lub prawej) strony i redystrybuuj wartości, tak aby oba były zapełnione co najmniej w połowie, Może dojść do propagacji i zmniejszenia liczby poziomów drzewa. Źródło: R. Elmasri, S. B. Navathe, Wprowadzenie do systemów baz danych, Helion, 00 0
0-0-6 USUWANIE Z B + -DRZEWA WYKŁAD PRZYGOTOWANO NA PODSTAWIE R. Elmasri, S. B. Navathe, Wprowadzenie do systemów baz danych, Helion, 00, http://wazniak.mimuw.edu.pl/index.php?title=bazy_ danych. Źródło: R. Elmasri, S. B. Navathe, Wprowadzenie do systemów baz danych, Helion, 00