• Nie Znaleziono Wyników

Systemy zarządzania bazami danych

N/A
N/A
Protected

Academic year: 2021

Share "Systemy zarządzania bazami danych"

Copied!
91
0
0

Pełen tekst

(1)

Systemy zarządzania bazami danych

3. Indeksy

(2)

wartość

• Indeksy konwencjonalne

• B-drzewa i B+drzewa

Indeksowanie i haszowanie

wartość

rekord(y)

(3)

Plik uporządkowany

2010 4030 6050 8070 10090

(4)

Plik uporządkowany

2010 4030 6050 8070 10090 Indeks gęsty

10 20 30 40 50 60 70 80 90 100 110

(5)

Plik uporządkowany

2010 4030 6050 8070 10090 Indeks rzadki

10 30 50 70 90 110 130 150 170 190 210 230

(6)

Plik uporządkowany

2010 4030 6050 8070 10090 2. poziomu

10 30 50 70 90 110 130 150 170 190 210 10

90 170 250 330 410 490 570

Rzadki indeks

(7)

Pytanko

• Czy ma sens gęsty indeks drugiego poziomu?

(8)

Wskaźniki do rekordów

• Wskaźnik do bloku (w indeksie rzadkim) jest mniejszy niż wskaźnik do rekordu

WdB WdR

• Jeśli plik jest fizycznie ciągły, możemy

(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

(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

(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

(12)

Powtarzalne klucze

1010 2010 3020 3030

(13)

1010 2010 3020 3030 40

10 10 10 20 20 30 30 30

1010 2010 3020 3030 40

10 10 10 20 20 30 30 30

Powtarzalne klucze

• Czy indeks gęsty to jedyna możliwość?

(14)

1010 2010 3020 3030

10 20 30 40

Powtarzalne klucze

• Indeks gęsty, czy lepszy pomysł?

(15)

1010 2010 3020 3030 40

10 10 20 30

Starannie szukaj 20 i 30

Powtarzalne klucze

• A może jednak rzadki? Oto pierwszy pomysł:

(16)

1010 2010 3020 3030

10 20 30 30

Możema być 40?

Powtarzalne klucze

• Rzadki: tylko pierwszy nowy klucz z bloku

(17)

Powtarzalne klucze, indeks główny

• Indeks może wskazywać tylko pierwsze wystąpienie każdej wartości klucza

Plik Indeks

a

a a

b

(18)

Usuwanie z indeksu rzadkiego

2010 4030 6050 8070

10 30 50 70 90 110 130 150

(19)

Usuwanie z indeksu rzadkiego

2010 4030 6050 8070

10 30 50 70 90 110 130 150

– usuń rekord 40

(20)

Usuwanie z indeksu rzadkiego

2010 4030 6050 8070

10 30 50 70 90 110 130 150

– usuń rekord 30

40 40

(21)

Usuwanie z indeksu rzadkiego

2010 4030 6050 8070

10 30 50 70 90 110 130 150

– usuń rekordy 30 i 40

50 70

(22)

Usuwanie z indeksu gęstego

2010 4030 6050 8070

10 20 30 40 50 60 70 80

(23)

Usuwanie z indeksu gęstego

2010 4030 6050 8070

10 20 30 40 50 60 70 80

– usuń rekord 30

40 40

(24)

Wstawienie, indeks rzadki

2010 30

5040 60

10 30 40 60

(25)

Wstawienie, indeks rzadki

2010 30

5040 60

10 30 40 60

– wstaw rekord 34

34

• dziś mamy szczęście!

wolne miejsce jest tam gdzie go potrzebujemy

(26)

Wstawienie, indeks rzadki

2010 30

5040 60

10 30 40 60

– wstaw rekord 15

15 30 20

20

• Tu: natychmiastowa reorganizacja

• Inne opcje:

(27)

Wstawienie, indeks rzadki

2010 30

5040 60

10 30 40 60

– wstaw rekord 25

25

Lista bloków nadmiarowych (reorganizacji później...)

(28)

Wstawienie, indeks gęsty

• Podobnie

• Zwykle jednak bardziej kosztowne

(29)

Indeksy drugorzędne

5030 7020 4080 10010

6090

(30)

Indeksy drugorzędne

5030 7020 4080 10010

90

• Indeks rzadki

30 20 80 100

90 ...

Chyba nie zadziała?

(31)

Indeksy drugorzędne

5030 7020 4080 10010

6090

• Indeks gęsty

10 20 30 40 50 60 70 ...

10 50 90 ...

rzadki wyższy poziom

(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

(33)

Klucze powtarzalne i indeks drugorzędny

1020 4020 4010 4010 4030

(34)

1020 4020 4010 4010 30

10 10 10 20 20 30 40 40 4040 ...

Pierwszy pomysł...

Problem:

Nadmierny narzut

• miejsce na dysku

• czas wyszukiwania

Klucze powtarzalne i indeks drugorzędny

(35)

1020 4020 4010 4010 4030

10

Inny pomysł...

40 30

Problem: 20

Indeks zawiera rekordy rozmiaru zmiennego

Klucze powtarzalne i indeks drugorzędny

(36)

1020 4020 4010 4010 4030

10 20 30 40 50 60 ...

Trzeci pomysł: lista rekordów o tej

samej wartości klucza?

Klucze powtarzalne i indeks drugorzędny

(37)

1020 4020 4010 4010 4030

1020 30 40 50 60 ...

Klucze powtarzalne i indeks drugorzędny

(38)

Pomysł z kubełkami jest dobry

• Po pierwsze rekordy indeksy stałej długości

• Przykładowy schemat

Indeksy Rekordy

Name: główny EMP (name,dept,floor,...)

Dept: drugorzędny Floor: drugorzędny

(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

(40)

Ten pomysł jest stosowany do

wydobywania informacji z tekstu (IR)

Dokumenty

...the cat is fat ...

...was raining

cats and dogs...

...Fido the cat

dog

(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

(42)

Więcej danych na liście odwróconej

cat Tytuł 5

Tytuł 100 Autor 10 Streszczenie 57

d3 d2

d1

dog

miejsce

nr znaku

wskaźnik

(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

(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

(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

(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, ...

(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

(48)

ciągła alokacja

wolne miejsce

1020 30 4050 60 7080 90

3931 3536

3238 34 33

Bloki nadmiarowe

Przykład gnicia indeksu konwencjonalnego

(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

(50)

Korzeń

Przykład B+drzewa n=3

100 120 150 180

30

3 5 11 30 35 100 101 110 120 013 150 156 179 180 200

(51)

Przykładowy węzeł wewnętrzny

do kluczy do kluczy do kluczy do kluczy

< 57 57 k<81 81k<9595

57 81 95

(52)

Z pewnego nie-liścia

do następnego w kolejności liścia

57 81 95

rekordu uczu 57 rekordu uczu 81 rekordu uczu 85

Przykładowy liść

(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

(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

(55)

Zapełniony Minimalny Nie-liść

Liść

n=3

120 150 180 30

3 5 11 30 35

się nawet gdy NULL

(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)

(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 (nie-korzeń) n+1Liść n

Korzeń n+1 n 1 1

Max Max Min Min wsk. klu. wsk.dane klu.

(n+1)/2 (n+1)/2

(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ń

(59)

(a) Wstaw klucz = 32 n=3

3 5 11 30 31

30 100 32

(60)

(b) Wstaw klucz = 7 n=3

3 5 11 30 31

30 100

3 5 7 7

(61)

(c) Wstaw klucz = 160 n=3

100 120 150 180

150 156 179 180 200

160 180

160 179

(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ń

(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

(64)

(b) Scalenie z sąsiadem

– Usuń 50

10 40 100

10 20 30 40 50

n=4

40

(65)

(c) Poprzerzucaj klucze

– Usuń 50

10 40 100

10 20 30 35 40 50

n=4

35

35

(66)

40 45 30 37

25 26 20 22

10 14 1 3

10 20 30 40

(d) Scalenie nie-liści

– Usuń 37

n=4

40 30

25

25

Nowy korzeń

(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

(68)

B+drzewa a indeksy konwencjonalne

• Na podstawie

[1] Held i Stonebraker “B-Trees Re- examined”, Communications of ACM, Feb. 1978

(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

(70)

1 blok indeksu statycznego

127 kluczy

(127+1)4 = 512 bajtów k1

k2 k3

k1

k2

k3

1 blok danych

(71)

1 blok B+drzewa

63 klucze

63x(4+4)+8 = 512 bajtów

-> wskaźniki są konieczne do 63 k1

k2 ...

k63

k1

k2

k3

1 blok danych

next -

(72)

Porównanie rozmiarów [1]

Porównanie rozmiarów [1]

Indeks statyczny B+drzewo liczba liczba

bloków wysokość bloków wysokość

2 -> 127 2 2 -> 63 2

128 -> 16,129 3 64 -> 3968 3 16,130 -> 2,048,383 4 3969 -> 250,047 4 250,048 -> 15,752,961 5

(73)

Wyniki analizy [1]

• W przypadku pliku 8000-blokowego po 32 000 wstawieniach

po 16 000 wyszukiwaniach

 Oszczedzamy tyle czasu, że starczy go na ręczną reorganizację

Wniosek z [1] Statyczne indeksy lepsze

(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

(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

(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!

(77)

Najlepszy stopień B+drzewa?

n to liczba kluczy w węzle

(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

(79)

Minimalizujemy funkcję:

f(n) = czas poszukiwania rekordu

f(n)

nopt n

(80)

 Znajdź n

opt

=> 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

(81)

A gdyby zwykłe B

drzewo? [ bez + ]

• Unikamy duplikacji kluczy

• Wskaźniki do rekordów są też w węzłach wewnętrznych

(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

(83)

Przykład B

drzewa 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 teraz bezużyteczna!

(84)

Uwaga o wstawieniach

• Wstawiamy rekord z kluczem 25

10 20 30 n=3

liść

– 20 –

• Potem:

(85)

Statystyka Bdrzew

MAX MIN

Wsk. Wsk. Klu. Wsk. Wsk. Klucze węz. rek. węz. rek.

Nie-liść

Nie-korzeń n+1 n n (n+1)/2 (n+1)/2-1 (n+1)/2-1

Liść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

(86)

Wady i zalety

 Bdrzewa pozwalają na szybsze wyszukiwanie niż B+drzewa

 W Bdrzewach liście i nie-liście są różnych rozmiarów

 W Bdrzewach usuwanie trudniejsze

 B+drzewa

(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.

(88)

Przykład

• Wskaźnik: 4 bajty

• Klucz 4 bajty

• Blok 100 bajtów (dla prostoty)

• Pełne dwupoziomowe drzewo

(89)

Korzeń ma 8 kluczy + 8 wskaźników na rekordy + 9 wskaźników na synów

= 8x4 + 8x4 + 9x4 = 100 bajtów Bdrzewo:

Każdy z 9 synów: 12 wsk. na rek. +12 kluczy

= 12x(4+4) + 4 = 100 bajtów 2-poziomowe Bdrzewo ma maksymalnie

12x9 + 8 = 116 rekordów

(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 maksymalnie

(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

Cytaty

Powiązane dokumenty

SELECT /*+ REWRITE(s) */ t.calendar_month, sum(s.amount_sold) AS dollars FROM sales s, times t.. WHERE s.time_id

(2) Zanim zmieniony x znajdzie się na dysku, wszystkie wpisy dotyczące transakcji, która zmodyfikowała x muszą trafić na dysk. (3) Przy commit , zrzuć dziennik na dysk ( flush

(4) Ti może założyć zamek X,SIX,IX na węzeł Q tylko wtedy, gdy rodzic(Q) ma zamek IX lub SIX założony przez transakcję Ti. (5) Ti zakłada

• Otwarcie połączenia z bazą danych jest drogie, ale wielokrotne użycie tanie. – Używaj

– Brak promocji zamków w Oracle; Parametry DB2 ustawione, żeby nie było promocji zamków; brak takiej kontroli w SQL Server. – Dual Xeon (550MHz,512Kb), 1Gb

– Zapis do pamięci podręcznej: transfer kończy się, gdy dane znajdą się w pamięci podręcznej sterownika. • Baterie gwarantują zapis przy

• Punkt kontrolny (częściowy zrzut brudnych strona na dysk) odbywa się w stałych odstępach lub po zapełnieniu dziennika:. – Wpływa na wydajność bazy + Pozwala

– Jeśli często odczytuje się adres dostawcy na podstawie numeru zamówionej części, to schemat 1 jest dobry.. – Jeśli jest wiele dodawanych wiele zamówień, schemat 1