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