Oryginał: Hector Garcia-Molina
3. Indeksy 1
Systemy zarządzania bazami danych
3. Indeksy
Oryginał: Hector Garcia-Molina
3. Indeksy 2
wartość
• Indeksy konwencjonalne• B-drzewa i B+drzewa• Haszowanie
Indeksowanie i haszowanie
wartość
rekord(y)
Oryginał: Hector Garcia-Molina
3. Indeksy 3
Plik uporządkowany
2010
4030
6050
8070
10090
Oryginał: Hector Garcia-Molina
3. Indeksy 4
Plik uporządkowany
2010
4030
6050
8070
10090
Indeks gęsty
10203040
50607080
90100110120
Oryginał: Hector Garcia-Molina
3. Indeksy 5
Plik uporządkowany
2010
4030
6050
8070
10090
Indeks rzadki
10305070
90110130150
170190210230
Oryginał: Hector Garcia-Molina
3. Indeksy 6
Plik uporządkowany
2010
4030
6050
8070
10090
2. poziomu
10305070
90110130150
170190210230
1090
170250
330410490570
Rzadki indeks
Oryginał: Hector Garcia-Molina
3. Indeksy 7
Pytanko
• Czy ma sens gęsty indeks drugiego poziomu?
Oryginał: Hector Garcia-Molina
3. Indeksy 8
Wskaźniki do rekordów• Wskaźnik do bloku (w indeksie rzadkim)
jest mniejszy niż wskaźnik do rekorduWdB
WdR
• Jeśli plik jest fizycznie ciągły, możemy wyliczać wskaźniki (i ich nie zapisywać)
Oryginał: Hector Garcia-Molina
3. Indeksy 9
K1
K3
K4
K2
R1
R2
R3
R4
Załóżmy, że bloki mają 1KB
rekordu o kluczu K3 szukamy w bloku o offsecie (3-1)1024 = 2048 bajtów
Oryginał: Hector Garcia-Molina
3. Indeksy 10
Kompromis: indeks gęsty czy rzadki?
• Rzadki– Mniej miejsca na indeks– Więcej indeksu mieści się w RAM
• Gęsty– Możemy sprawdzić, czy jest taki rekord
bez zaglądania do pliku– Możliwe użycie strategii „tylko-indeks”
Oryginał: Hector Garcia-Molina
3. Indeksy 11
Pojęcia
• Uporządkowany plik indeksowy • Klucz wyszukiwania (nie zawsze klucz!)• Indeks główny (na polu porządkującym)• Indeks niegłówny (drugorzędny)• Indeks gęsty lub rzadki• Indeks pogrupowany lub niepogrupowany• Indeks wewnętrzny lub zewnętrzny • Indeks wielopoziomowy
Oryginał: Hector Garcia-Molina
3. Indeksy 12
Powtarzalne klucze
1010
2010
3020
3030
4540
Oryginał: Hector Garcia-Molina
3. Indeksy 13
1010
2010
3020
3030
4540
10101020
20303030
1010
2010
3020
3030
4540
10101020
20303030
Powtarzalne klucze
• Czy indeks gęsty to jedyna możliwość?
Oryginał: Hector Garcia-Molina
3. Indeksy 14
1010
2010
3020
3030
4540
10203040
Powtarzalne klucze
• Indeks gęsty, czy lepszy pomysł?
Oryginał: Hector Garcia-Molina
3. Indeksy 15
1010
2010
3020
3030
4540
10102030
Sta
ran
nie
szu
kaj
20
i 3
0Powtarzalne klucze
• A może jednak rzadki? Oto pierwszy pomysł:
Oryginał: Hector Garcia-Molina
3. Indeksy 16
1010
2010
3020
3030
4540
10203030
Możema być40?
Powtarzalne klucze
• Rzadki: tylko pierwszy nowy klucz z bloku
Oryginał: Hector Garcia-Molina
3. Indeksy 17
Powtarzalne klucze, indeks główny• Indeks może wskazywać tylko
pierwsze wystąpienie każdej wartości klucza
Plik Indeks
aaa
b
Oryginał: Hector Garcia-Molina
3. Indeksy 18
Usuwanie z indeksu rzadkiego
2010
4030
6050
8070
10305070
90110130150
Oryginał: Hector Garcia-Molina
3. Indeksy 19
Usuwanie z indeksu rzadkiego
2010
4030
6050
8070
10305070
90110130150
– usuń rekord 40
Oryginał: Hector Garcia-Molina
3. Indeksy 20
Usuwanie z indeksu rzadkiego
2010
4030
6050
8070
10305070
90110130150
– usuń rekord 30
4040
Oryginał: Hector Garcia-Molina
3. Indeksy 21
Usuwanie z indeksu rzadkiego
2010
4030
6050
8070
10305070
90110130150
– usuń rekordy 30 i 40
5070
Oryginał: Hector Garcia-Molina
3. Indeksy 22
Usuwanie z indeksu gęstego
2010
4030
6050
8070
10203040
50607080
Oryginał: Hector Garcia-Molina
3. Indeksy 23
Usuwanie z indeksu gęstego
2010
4030
6050
8070
10203040
50607080
– usuń rekord 30
4040
Oryginał: Hector Garcia-Molina
3. Indeksy 24
Wstawienie, indeks rzadki
2010
30
5040
60
10304060
Oryginał: Hector Garcia-Molina
3. Indeksy 25
Wstawienie, indeks rzadki
2010
30
5040
60
10304060
– wstaw rekord 34
34
• dziś mamy szczęście! wolne miejsce jest tam gdzie go potrzebujemy
Oryginał: Hector Garcia-Molina
3. Indeksy 26
Wstawienie, indeks rzadki
2010
30
5040
60
10304060
– wstaw rekord 15
15
2030
20
• Tu: natychmiastowa reorganizacja• Inne opcje:
– Dodać blok nadmiarowy– Poprawić indeks
Oryginał: Hector Garcia-Molina
3. Indeksy 27
Wstawienie, indeks rzadki
2010
30
5040
60
10304060
– wstaw rekord 25
25
Lista bloków nadmiarowych(reorganizacji później...)
Oryginał: Hector Garcia-Molina
3. Indeksy 28
Wstawienie, indeks gęsty
• Podobnie
• Zwykle jednak bardziej kosztowne
Oryginał: Hector Garcia-Molina
3. Indeksy 29
Indeksy drugorzędne
5030
7020
4080
10100
6090
Oryginał: Hector Garcia-Molina
3. Indeksy 30
Indeksy drugorzędne
5030
7020
4080
10100
6090
• Indeks rzadki
302080
100
90...
Chyba nie zadziała?
Oryginał: Hector Garcia-Molina
3. Indeksy 31
Indeksy drugorzędne
5030
7020
4080
10100
6090
• Indeks gęsty10203040
506070...
105090...
rzadkiwyższypoziom
Oryginał: Hector Garcia-Molina
3. Indeksy 32
Indeksy drugorzędne
• Najniższy poziom musi być gęsty• Wszystkie pozostałe są rzadkie• Wskaźniki są wskaźnikami na
rekordy– Nie: wskaźniki blokowe– Nie: wyliczane
Oryginał: Hector Garcia-Molina
3. Indeksy 33
Klucze powtarzalne i indeks drugorzędny
1020
4020
4010
4010
4030
Oryginał: Hector Garcia-Molina
3. Indeksy 34
1020
4020
4010
4010
4030
10101020
20304040
4040...
Pierwszy pomysł...
Problem:Nadmierny narzut• miejsce na dysku• czas wyszukiwania
Klucze powtarzalne i indeks drugorzędny
Oryginał: Hector Garcia-Molina
3. Indeksy 35
1020
4020
4010
4010
4030
10
Inny pomysł...
4030
20
Problem:Indeks zawiera rekordy rozmiaru zmiennego
Klucze powtarzalne i indeks drugorzędny
Oryginał: Hector Garcia-Molina
3. Indeksy 36
1020
4020
4010
4010
4030
10203040
5060...
Trzeci pomysł: lista rekordów o tej samej wartości klucza?
Problemy:• Dodatkowe pole w rekordzie• Liniowe przeszukiwanie listy rekordów
Klucze powtarzalne i indeks drugorzędny
Oryginał: Hector Garcia-Molina
3. Indeksy 37
1020
4020
4010
4010
4030
10203040
5060...
kubełki
Klucze powtarzalne i indeks drugorzędny
Oryginał: Hector Garcia-Molina
3. Indeksy 38
Pomysł z kubełkami jest dobry
• Po pierwsze rekordy indeksy stałej długości
• Przykładowy schemat
Indeksy RekordyName: główny EMP
(name,dept,floor,...)
Dept: drugorzędnyFloor: drugorzędny
Oryginał: Hector Garcia-Molina
3. Indeksy 39
Znajdź pracowników z działu Toy i 2.
piętra: (‘Toy’ = Dept) ^ (floor = 2 )
Indeks na Dept Plik EMP Indeks na floor
Toy 2
Oblicz przecięcie obu kubełków, żeby znaleźć pasujących pracowników
Oryginał: Hector Garcia-Molina
3. Indeksy 40
Ten pomysł jest stosowany do wydobywania informacji z tekstu (IR)
Dokumenty
...the cat is fat ...
...was raining cats and dogs...
...Fido the dog ...
Listy odwrócone
cat
dog
Oryginał: Hector Garcia-Molina
3. Indeksy 41
Zapytania IR (Information Retrieval)• Znajdź dokumenty zawierające “cat” i “dog”• Znajdź dokumenty zawierające “cat” lub
“dog”• Znajdź dokumenty zawierające “cat” ale bez
“dog”• Znajdź dokumenty zawierające “cat” w
tytule• Znajdź dokumenty zawierające “cat” i “dog”
w odległości co najwyżej 5 słów
Oryginał: Hector Garcia-Molina
3. Indeksy 42
Więcej danych na liście odwróconej
cat Tytuł 5
Tytuł 100
Autor 10
Streszczenie57
Tytuł 12
d3d2
d1
dog
miejsce
nr znaku
wskaźn
i
k
Oryginał: Hector Garcia-Molina
3. Indeksy 43
Hasło = pozycja listy odwróconej• Reprezentuje wystąpienie słowa w
dokumencie
Długość listy: 1 Słowa rzadkie (liczba haseł) lub błędy ortograficzne
106 Słowa często używane
• Rozmiar hasła: 10-15 bitów (po kompresji)
Oryginał: Hector Garcia-Molina
3. Indeksy 44
Zagadnienia IR
• Słowa ignorowane• Skracanie słów• Wyrazy bliskoznaczne• Fleksja (zwłaszcza w polskim: liczne
pułapki)– Po normalizacji słów okazało się że najczęściej
w Panu Tadeuszu występuje słowo „oda” (od)• Błędy ortograficzne• Pełne teksty czy Streszczenia• Model wektorowy
Oryginał: Hector Garcia-Molina
3. Indeksy 45
Model przestrzeni wektorowej
s1 s2 s3 s4 s5 s6 s7 …Dokument= <1 0 0 1 1 0 0 …>
Zapytanie = <0 0 1 1 0 0 0 …>
Koniunkcja= ... + 1 + … = punktacja
Oryginał: Hector Garcia-Molina
3. Indeksy 46
Usprawnienia IR• Model wektorowy przypomina listy
bitmapowe• Różne sposoby ważenia punktacji i
normalizacji, np.– Dopasowanie słowa częstego nie jest
tak znaczące (wartościowe) jak słowa rzadkiego
• Implementacja: Google, Altavista, ...
Oryginał: Hector Garcia-Molina
3. Indeksy 47
Indeksy konwencjonalne
• Zalety– Proste– Indeks jest plikiem uporządkowanym
wygodnym przy pełnych przeglądach
• Wady– Wstawienia są kosztowe lub– Tracimy fizyczne uporządkowanie lub
równowagę
Oryginał: Hector Garcia-Molina
3. Indeksy 48
ciągła alokacja
wolne miejsce
102030
405060
708090
39313536
323834
33
Bloki nadmiarowe(nieciągłe)
Przykład gnicia indeksu konwencjonalnego
Oryginał: Hector Garcia-Molina
3. Indeksy 49
Lekarstwo
• Nowy rodzaj indeksu• Rezygnujemy z ciągłej alokacji stron
indeksu• Staramy się by się sam równoważył• Rodzaje drzew równoważących się: AVL,
czerwono-czarne, B-drzewa• W bazach danych B-drzewa, w właściwie
B+drzewa
Oryginał: Hector Garcia-Molina
3. Indeksy 50
Korzeń
Przykład B+drzewa n=3
100
120
150
180
30
3 5 11
30
35
100
101
110
120
130
150
156
179
180
200
Oryginał: Hector Garcia-Molina
3. Indeksy 51
Przykładowy węzeł wewnętrzny
do kluczy do kluczy do kluczy do kluczy
< 57 57 k<81 81k<95 95
57
81
95
Oryginał: Hector Garcia-Molina
3. Indeksy 52
Z pewnego nie-liścia
do następnego
w kolejności
liścia
57
81
95
Do r
ekord
u
o k
lucz
u 5
7
Do r
ekord
u
o k
lucz
u 8
1
Do r
ekord
u
o k
lucz
u 8
5
Przykładowy liść
Oryginał: Hector Garcia-Molina
3. Indeksy 53
Rozmiar węzłów
• Rozmiar stały– jeśli klucze stałego rozmiaru...
• n wartości kluczy • n+1 wskaźników
– Liść: n wskaźników na rekordy i fastryga
– Nie-liść: n+1 wskaźników na niższy poziom
Oryginał: Hector Garcia-Molina
3. Indeksy 54
Węzły nie mogą być zbyt puste
• Zapełnienie co najmniej 50%– Teoretycznie...– Praktycznie w zasadzie tak, ale nie do
końca
• Zapełnienie co najmniej – Nie-liść: (n+1)/2 wskaźników – Liść: (n+1)/2 wskaźników na
dane
Oryginał: Hector Garcia-Molina
3. Indeksy 55
ZapełnionyMinimalny
Nie-liść
Liść
n=3
12
01
50
18
0
30
3 5 11
30
35
Licz
y s
ię n
aw
et
gdy N
ULL
Oryginał: Hector Garcia-Molina
3. Indeksy 56
Reguły B+drzew
1. Wszystkie liście są na tym samym poziomie (drzewo zrównoważone)
2. Wskaźniki w liściach wskazują rekordy (z wyjątkiem fastrygi)
Oryginał: Hector Garcia-Molina
3. Indeksy 57
3. Liczba wskaźników i kluczy
• Stopień drzewa = n
Nie-liść(nie-korzeń) n+1 n (n+1)/2 (n+1)/2- 1
Liść(nie-korzeń) n+1 n
Korzeń n+1 n 1 1
Max Max Min Min wsk. klu. wsk.dane klu.
(n+1)/2 (n+1)/2
Oryginał: Hector Garcia-Molina
3. Indeksy 58
Wstawienie do B+drzewa
(a) Przypadek najłatwiejszy– Gdy w liściu jest wolne miejsce
(b) Przepełnienie liścia(c) Przepełnienie węzła
wewnętrznego(d) Nowy korzeń
Oryginał: Hector Garcia-Molina
3. Indeksy 59
(a) Wstaw klucz = 32 n=33 5 11
30
31
30
100
32
Oryginał: Hector Garcia-Molina
3. Indeksy 60
(b) Wstaw klucz = 7 n=3
3 5 11
30
31
30
100
3 5
7
7
Oryginał: Hector Garcia-Molina
3. Indeksy 61
(c) Wstaw klucz = 160 n=3
10
0
120
150
180
150
156
179
180
200
160
18
0
160
179
Oryginał: Hector Garcia-Molina
3. Indeksy 62
(d) Wstaw 45 – nowy korzeń n=3
10
20
30
1 2 3 10
12
20
25
30
32
40
40
45
40
30Nowy korzeń
Oryginał: Hector Garcia-Molina
3. Indeksy 63
Usunięcie z B+drzewa
(a)Przypadek najłatwiejszy(b)Scal się z sąsiadem (bliźniakiem)(c) Poprzerzucaj klucze(d)Przypadki (b) lub (c) w nie-liściu
Oryginał: Hector Garcia-Molina
3. Indeksy 64
(b) Scalenie z sąsiadem– Usuń 50
10
40
100
10
20
30
40
50
n=4
40
Oryginał: Hector Garcia-Molina
3. Indeksy 65
(c) Poprzerzucaj klucze– Usuń 50
10
40
100
10
20
30
35
40
50
n=4
35
35
Oryginał: Hector Garcia-Molina
3. Indeksy 66
40
45
30
37
25
26
20
22
10
141 3
10
20
30
40
(d) Scalenie nie-liści– Usuń 37
n=4
40
30
25
25
Nowy korzeń
Oryginał: Hector Garcia-Molina
3. Indeksy 67
Usunięcia z B+drzew w praktyce
• Zwykle nie dokonuje się scalania– Jest zbyt kosztowne i nie warto tego
robić– I tak trzeba co jakiś czas
przebudować indeksy ze względu na błędy w SZBD
Oryginał: Hector Garcia-Molina
3. Indeksy 68
B+drzewa a indeksy konwencjonalne
• Na podstawie[1] Held i Stonebraker “B-Trees Re-examined”, Communications of ACM, Feb. 1978
Oryginał: Hector Garcia-Molina
3. Indeksy 69
Wnioski z [1]
• W B+drzewach trudniej obsługiwać współbieżność
• B+drzewa zużywają więcej przestrzeni• Założenia analizy
– blok = 512 bajtów– klucz = wskaźnik = 4 bajty– 4 rekordy w bloku
Oryginał: Hector Garcia-Molina
3. Indeksy 70
1 blok indeksu statycznego
127 kluczy
(127+1)4 = 512 bajtów-> wskaźniki wyliczane (offsety) do 127
bloków
k1
k2
k3
k1
k2
k3
1 blokdanych
Oryginał: Hector Garcia-Molina
3. Indeksy 71
1 blok B+drzewa
63 klucze
63x(4+4)+8 = 512 bajtów-> wskaźniki są konieczne do 63
bo B+drzewo nie jest ciągłe bloków
k1
k2
...
k63
k1
k2
k3
1 blokdanych
next
-
Oryginał: Hector Garcia-Molina
3. Indeksy 72
Porównanie rozmiarów [1]Porównanie rozmiarów [1]
Indeks statyczny B+drzewoliczba liczbabloków wysokość bloków
wysokość2 -> 127 2 2 -> 63 2128 -> 16,129 3 64 -> 3968 316,130 -> 2,048,383 4 3969 -> 250,047 4
250,048 -> 15,752,961 5
Oryginał: Hector Garcia-Molina
3. Indeksy 73
Wyniki analizy [1]• W przypadku pliku 8000-blokowego
po 32 000 wstawieniachpo 16 000 wyszukiwaniach
Oszczedzamy tyle czasu, że starczy go na ręczną reorganizację
Wniosek z [1] Statyczne indeksy lepsze
Oryginał: Hector Garcia-Molina
3. Indeksy 74
[2] M. Stonebraker, “Retrospective on a database system,” TODS, June 1980
Wniosek z [2] B+drzewa są lepsze!
• DBA nie wie, kiedy reorganizować• DBA nie wie, jak bardzo zapełnić
strony indeksu po reorganizacji
Oryginał: Hector Garcia-Molina
3. Indeksy 75
• Zarządzanie buforami– B+drzewo ma stałą wymaganą
wielkość bufora (liczbę bloków)– Indeks statyczny musi być może
doczytać kilka stron nadmiarowych (co wymaga większej i zmiennej liczby niezbędnych buforów)
Wnioski z [2] B+drzewa są lepsze
Oryginał: Hector Garcia-Molina
3. Indeksy 76
Zarządzanie buforami
• Czy LRU to dobra strategia zarządzania buforami?– Oczywiście nie!– Korzeń musi być przyszpilony w
pamięci...– I być może nizsze poziomy też– Czyli MRU!
Oryginał: Hector Garcia-Molina
3. Indeksy 77
Najlepszy stopień B+drzewa?
…
n to liczba kluczy w węzle
Oryginał: Hector Garcia-Molina
3. Indeksy 78
Przykładowe założenia(1) Czas potrzebny na odczyt węzła z
dysku (70+0.05n) ms(2) Gdy węzeł jest w pamieci, korzystamy z
wyszukiwania binarnego (a + b LOG2 n) ms
Dla pewnych stałych a,b; Zakładamy, że a << 70
(3) Założmy, że B+drzewo jest zapełnione liczba węzłów do przejrzenia to LOGnN gdzie N = liczba rekordów
Oryginał: Hector Garcia-Molina
3. Indeksy 79
Minimalizujemy funkcję: f(n) = czas poszukiwania rekordu
f(n)
nopt n
Oryginał: Hector Garcia-Molina
3. Indeksy 80
Znajdź nopt => pochodna f’(n) = 0• nopt = kilkaset
• W praktyce koszt odczytu bloku nie zależy od n, bo węzeł = blok
• Ignorujemy koszt CPU
• Minimalizujemy więc LOGnN
• Czyli? • Upychamy w bloku tyle kluczy, ile
wlezie• I tak wychodzi kilkaset
Oryginał: Hector Garcia-Molina
3. Indeksy 81
A gdyby zwykłe Bdrzewo? [ bez + ] • Unikamy duplikacji kluczy• Wskaźniki do rekordów są też w
węzłach wewnętrznych
Oryginał: Hector Garcia-Molina
3. Indeksy 82
do rekordu do rekordu do rekordu do K1 z K2 z K3
do kluczy do kluczy do kluczy do kluczy
< K1 K1<x<K2 K2<x<K3 >K3
K1 W1 K2 W2 K3 W3
Oryginał: Hector Garcia-Molina
3. Indeksy 83
Przykład Bdrzewa n=2
65
125
145
165
85
105
25
45
10
20
30
40
110
120
90
100
70
80
170
180
50
60
130
140
150
160
Fastryga jest terazbezużyteczna!
Oryginał: Hector Garcia-Molina
3. Indeksy 84
Uwaga o wstawieniach• Wstawiamy rekord z kluczem 25
10
20
30 n=3
liść
10
– 20 –
25
30
• Potem:
Oryginał: Hector Garcia-Molina
3. Indeksy 85
Statystyka Bdrzew
MAX MINWsk. Wsk. Klu. Wsk. Wsk. Kluczewęz. rek. węz. rek.
Nie-liśćNie-korzeń n+1 n n (n+1)/2 (n+1)/2-1
(n+1)/2-1LiśćNie-korzeń 1 n n 1 (n+1)/2
(n+1)/2
KorzeńNie-liść n+1 n n 2 1 1
KorzeńLiść 1 n n 1 1 1
Oryginał: Hector Garcia-Molina
3. Indeksy 86
Wady i zalety Bdrzewa pozwalają na szybsze
wyszukiwanie niż B+drzewa
W Bdrzewach liście i nie-liście są różnych rozmiarów
W Bdrzewach usuwanie trudniejsze
B+drzewa lepsze!
Oryginał: Hector Garcia-Molina
3. Indeksy 87
Ale...
• Jeśli bloki są stałego rozmiaru (a tak jest w przypadku wielu dysków):
• To wyszukiwanie w B+drzewach jest w istocie lepsze.
Oryginał: Hector Garcia-Molina
3. Indeksy 88
Przykład
• Wskaźnik: 4 bajty• Klucz 4 bajty• Blok 100 bajtów (dla prostoty)• Pełne dwupoziomowe drzewo
Oryginał: Hector Garcia-Molina
3. Indeksy 89
Korzeń ma 8 kluczy + 8 wskaźników na rekordy+ 9 wskaźników na synów
= 8x4 + 8x4 + 9x4 = 100 bajtów
Bdrzewo:
Każdy z 9 synów: 12 wsk. na rek. +12 kluczy= 12x(4+4) + 4 = 100 bajtów
2-poziomowe Bdrzewo ma maksymalnie12x9 + 8 = 116 rekordów
Oryginał: Hector Garcia-Molina
3. Indeksy 90
Korzeń ma 12 kluczy + 0 wskaźników na rekordy + 13 wskaźników na synów
= 12x4 + 0x4 + 13x4 = 100 bajtów
B+drzewo:
Każdy z 13 synów: 12 wsk. na rek. +12 kluczy= 12x(4+4) + 4 = 100 bajtów
2-poziomowe B+drzewo ma maksymalnie13x12 = 156 rekordów
Oryginał: Hector Garcia-Molina
3. Indeksy 91
Zatem?
ooooooooooooo ooooooooo 156 rekordów 108 rekordów
Razem = 116
B+ B
8 rekordów
• Wniosek– W przypadku bloków stałego rozmiaru,– B+drzewa są lepsze, bo są bardziej
krzaczaste
Top Related