Tadeusz Pankowski, Indeksy o strukturze B
Transkrypt
Tadeusz Pankowski, Indeksy o strukturze B
Tadeusz Pankowski, Indeksy o strukturze B-drzewa Organizacja dostępu do pliku za pomocą B-drzewa Definicja indeksu: I = {(x, a) : ∃ r ∈ F(R) x = key(r) ∧ a = kbd(r)} F(R) – plik rekordów typu R, F(R) = {r1, ..., rn}, x = key(r) – wartość klucza głównego w rekordzie r, a = kbd(r) – klucz bazy danych (adres rekordu r). Definicja B-drzewa (perfectly balanced multiway tree) Drzewo skierowane T nazywamy B-drzewem klasy t(h, m), jeśli h = 0 (drzewo puste) lub • Wszystkie drogi od korzenia do liści są długości h, • Każdy wierzchołek z wyjątkiem korzenia ma co najmniej m kluczy (elementów indeksu) i m+1 potomków, • Każdy wierzchołek ma co najwyżej 2m kluczy (i 2m+1 potomków), • Korzeń ma co najmniej jeden klucz. Struktura strony (wierzchołka) w B-drzewie: p0 | x1 | a1 | p1 | x2 | a2 | p2 | ... | xk | ak | pk | ... 1≤ ≤ k ≤ 2m dla korzenia, i m ≤ k ≤ 2m dla wierzchołków i liści. W każdym wierzchołku x1 < ... < xk, pi - wskaźnik na wierzchołek będący potomkiem lub NIL, (xi, ai) indeks. xi-1 | pi-1 | xi | pi | xi+1 schemat uporządkowania kluczy. xi-1 < x < xi xi < x < xi+1 Operacje na indeksie zorganizowanym według struktury B-drzewa Dołączanie • metoda podziału • metoda kompensacji Chcemy dołączyć element indeksu o kluczu x, tak aby nie naruszyć struktury B-drzewa. Dołączanie poprzedzone jest procedurą SZUKAJ, w wyniku której, albo znajdziemy wierzchołek zawierający klucz x (koniec) albo znajdziemy adres wierzchołka (liścia) do którego należy dołączyć klucz x. Jeśli wierzchołek ma mniej niż 2m elementów to dołączamy nowy klucz. Jeśli wierzchołek ma 2m elementów to następuje tzw. kolizja (przepełnienie, nadmiar), którą rozwiązujemy albo metodą podziału albo metodą kompensacji. Likwidacja nadmiaru a) metoda podziału 2m+1 elementów dzielimy na trzy części. Elementy 1, ... , m umieszczamy w wierzchołku 1 Element m+1 przenosimy do strony ojca Elementy m+2, ... , 2m+1 umieszczamy w wierzchołku 2 Przykład 1 dla m = 2 Rys 1. ... | • | 15 | • | ... * | 2 | * | 4 | * | 5 | * | 7 | * | 10 | * * | 18 | * | 20 | * ⇓ ... | • | 5 | • | 15 | • | ... * | 2 | * | 4 | * * | 7 | * | 10 | * * | 18 | * | 20 | * Jeżeli w stronie ojca nastąpi przepełnienie to algorytm powtarzamy. Tadeusz Pankowski, Indeksy o strukturze B-drzewa b) metoda kompensacji: można ją stosować jeżeli sąsiednia strona zawiera j<2m elementów. Stan wyjściowy – rys 1, j=2<2m, obliczamy i=entier((2m+j+3)/2) = ((4+2+3)/2) = 4. Elementy 1, 2, ..., i-1 umieszczamy w wierzchołku1, Element i przenosimy do strony ojca, Elementy i+1, ..., 2m+j+2 umieszczamy w wierzchołku 2. ... | • | 7 | • | ... * | 2 | * | 4 | *| 5 | * * | 10 | * | 15 | * | 18 | * | 20 | * Usuwanie • metoda łączenia • metoda kompensacji Chcemy usunąć element o kluczu x. Usuwanie podobnie jak dołączanie poprzedzone jest algorytmem wyszukiwania. Procedura SZUKAJ powinna zakończyć się powodzeniem i zwrócić adres (s) wierzchołka (strony) zawierającej klucz x. • Jeśli strona jest liściem to usuwamy indeks o kluczu x. Może wówczas wystąpić niedomiar, który usuwamy metodą łączenia lub kompensacji. • Jeżeli strona nie jest liściem to przeglądamy poddrzewo wskazywane przez prawy wskaźnik stojący za kluczem x i szukamy najmniejszego indeksu (L) - idziemy ścieżką wskazywaną przez p0, aż dojdziemy do liścia. Ten najmniejszy element wstawiamy w (s) miejsce (x, a) a następnie usuwamy go z ... | x | a | p | ... liścia – może wystąpić niedomiar. p0 | po | L | | … … … ….. .… ….. | Likwidacja niedomiaru a) metoda łączenia stosujemy ją jeśli strona s zawiera j<m elementów, a jedna ze stron sąsiednich (s1) zawiera k elementów , przy czym j+k<2m s2 s2 | | 10 | • | 20 | • | 30 | | | | 10 | • | 30 | | po połączeniu s s1 ⇒ s • | 11 | • | | | • | 21 | • | 22 | • | | • | 11 | • | 20 | • | 21 | • | 22 | • | Na stronie s2 może wystąpić niedomiar, trzeba wówczas operację łączenia powtórzyć, lub jeśli s2 jest korzeniem to przekazujemy go do puli stron pustych (drzewo zmniejszy wysokość). b) metoda kompensacji: jeżeli dla każdej ze stron sąsiednich j+k ≥ 2m to stosujemy metodę kompensacji analogicznie jak przy dołączaniu. Tadeusz Pankowski, Indeksy o strukturze B-drzewa Zadanie: 1. Uzasadnij, że liczby wierzchołków Wmin i Wmax B-drzewa klasy t(h,m) przy, odpowiednio, maksymalnym i minimalnym wypełnieniu tego drzewa, wyrażają się wzorami: ܹ 2((݉ + 1)ିଵ − 1) = 1+ ݉ ܹ௫ = (2݉ + 1) − 1) 2݉ 2. Uzasadnij, że dla indeksu liczącego N elementów liczba h poziomów tego indeksu zorganizowanego według struktury B-drzewa klasy t(h,m) spełnia ograniczenie ݈݃ଶାଵ (ܰ + 1) ≤ ℎ ≤ 1 + ݈݃ାଵ ൬ ܰ+1 ൰ 2