Organizacja dostępu do pliku za pomocą B

advertisement
BAD 420 B-drzewa
str.1
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) i m+1 synów,
 Każdy wierzchołek ma, co najwyżej 2m kluczy (i 2m+1 synó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 synem 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. 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.
BAD 420 B-drzewa
str.2
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.
BAD 420 B-drzewa
str.3
ZADANIA
1. Oblicz liczbę wierzchołków Wmin i Wmax B_drzewa klasy T(h, m) odpowiednio przy minimalnym
i maksymalnym wypełnieniu drzewa.
2. Dany jest indeks zawierający N elementów. Oblicz w jakim przedziale zawiera się liczba h
(wysokość drzewa), jeżeli indeks zorganizowany jest w postaci B_drzewa klasy t(h, m). (Zadanie
proszę rozwiązać dwoma sposobami: a) korzystając z definicji B_drzewa
b) korzystając z poprzedniego zadania).
3. Niech K=12B, P=3B, A=6B, L=120B oznaczają długość (w bajtach) odpowiednio: pola wartości
klucza indeksowania, pola wskaźnika na blok, pola wskaźnika na rekord, długość rekordu. Niech
strona ma wielkość 1kB.
a) Oblicz ograniczenie na liczbę rekordów (N), w pliku dla którego może być utworzony indeks w
postaci B_drzewa klasy t(h, m) gdzie h=3 (przy minimalnym i maksymalnym wypełnieniu).
b) Oblicz maksymalną wielkość pliku podstawowego, dla którego może być utworzony taki indeks
i rozmiar pliku indeksu (struktury B_drzewa).
4. Oblicz maksymalne (minimalne) zużycie pamięci konieczne na zapamiętanie indeksu w postaci
B_drzewa, przy następujących danych:
N = 100 000
- liczba rekordów w pliku głównym,
B = 1kB
- wielkość bloku,
P = 4B
- wielkość pola wskaźnikowego,
A = 8B
- wielkość pola adresowego,
X = 20B
- wielkość pola klucza indeksowania.
Jaka jest wówczas wysokość B_drzewa?
5. Dane jest B_drzewo klasy t(h, 2) (rys.2):
a) wstaw obiekt o kluczu 32 (metodą podziału i metodą kompensacji),
b) usuń obiekt o kluczu 46 (metodą łączenia i metodą kompensacji).
|  | 40 |  | ...
Rys 2.
 | 5 |  | 15 |  | 18 |  | 26 | 
* |1| * |2| *
* |16| * |17| *
*|7|*|9|*
* |27| * |28| * |30| * |31| *
* | 19 | * | 21 | * | 22 | *
 | 46 |  | 50 | 
* |42| * |45| *
* |51| * |55| *|56| *
* | 47 | * | 49 | *
Download