• Nie Znaleziono Wyników

Systemy zarządzania bazami danych

N/A
N/A
Protected

Academic year: 2021

Share "Systemy zarządzania bazami danych"

Copied!
50
0
0

Pełen tekst

(1)

Systemy zarządzania bazami danych

4. Haszowanie i więcej wymiarów

(2)

Haszowanie

• klucz  h(klucz) <klucz>

Kubełki (zwykle 1 blok dysku)

(3)

Oryginał: Hector Garcia-Molina 4. Haszowanie i więcej wymiarów 3

.

Indeks haszowany wewnętrzny

rekordy

.

. .

(1) klucz  h(klucz)

(4)

(2) klucz  h(klucz)

Indeks

rekord

klucz 1

• Indeksy drugorzędne mogą by tylko zewnętrzne

Indeks haszowany zewnętrzny

(5)

Funkcja haszująca

• Klucz = ‘x1 x2 … xn’ napis n-bajtowy

• Liczba kubełków = b

• h: dodaj x1 + x2 + ….. xn

– weź sumę modulo b

• To nie musi być dobra funkcja

– Sztuka Programowania D. Knutha Tom 3

• Przy dobrej funkcji spodziewamy się podobnej wielkości każdego kubełka

(6)

Kubełek

• Czy klucze mają być posortowane?

• Tak, ale tylko wtedy gdy czas procesora jest krytyczny a wstawienia i usunięcia rekordów nie są zbyt częste

(7)

Strona nadmiarowa

Wstawienie:

h(a) = 1 h(b) = 2 h(c) = 1 h(d) = 0

0 1 2 3

d a c b

h(e) = 1

e

(8)

0 1 2 3

a b c e

d

Usuwanie

Usuń:

e f

f g

Może przesunąć

“g” w górę?

c

d

(9)

Przybliżona reguła pielęgnacji

• Staraj się utrzymywać stopień wykorzystania między 50% a 80%

Stopień ten to liczba zajętych pozycji liczba wszystkich pozycji

• Jeśli < 50%, marnuje się miejsce

• Jeśli > 80%, strony nadmiarowe groźne wszystko zależy od jakości funkcji i

liczby rekordów na kubełek

(10)

Radzenie sobie ze wzrostem

• Strony nadmiarowe i reorganizacje

• Haszowanie dynamiczne

• Rozszerzalne

• Liniowe

(11)

Haszowanie rozszerzalne

(a) Patrzymy na i spośród b bitów wyniku funkcji haszującej

b h(K) 

i

00110101

(12)

(b) Tworzymy katalog

h(K)[i ] do kubełka

(13)

Przykład: h(k) ma 4 bity; 2 klucze/kubełek

i = 1

1

1

0001

1001 1100

Wstaw 1010 11100

1010

Nowy katalog 2

00 01 10 11

i =

2 2

(14)

1

0001

2

1001 1010 2

1100 Wstaw:

0111 0000

00 01 10 11

2 i =

Kontynuacja przykładu

0111 0000

0111 0001

2 2

(15)

00 01 10 11

i = 2

1001 2 1010 1100 2 0111 2 0000 2 0001

Wstaw:

1001

Kontynuacja przykładu

1001 1001 1010

000 001 010 011 100 101 110 111

i = 3

3 3

(16)

Usuwanie przy h. rozszerzalnym

• Bez łączenie kubełków ALBO

• Z łączeniem kubełków i zmniejszaniem katalogu jeśli to możliwe

(Odwrotność wstawiania)

• Odtwórz prezentację wstecz, żeby zobaczyć

• Ale koszt wykrycia duży...

(17)

Haszowanie rozszerzalne

+ Obsługuje puchnące pliki

+ mniej reorganizując

+ bez pełnych reorganizacji – Pośredniość

(Nieźle jeśli katalog mieści się pamięci, ale...)

– Katalog zawsze rośnie dwukrotnie

(Raz się mieści a raz nie)

(18)

Haszowanie liniowe

Dwa pomysły:

(a) Używaj i młodszych bitów funkcji

01110101

wzrost b

i

(b) Plik rośnie liniowo

(19)

Przykład b=4 bity, i =2, 2 klucze/kubełek

00 01 10 11

0101 1111 0000

1010

m = 01 (najdalszy używany blok)

Kubełki na przyszly

wzrost

Jeśli h(k)[i ]  m, to

szukaj w kubełku h(k)[i ] Reg.

0101 • mogą być strony nadmiarowe !

• wstaw 0101

(20)

Przykład b=4 bity, i =2, 2 klucze/kubełek

00 01 10 11

0101 1111 0000

1010

m = 01 (najdalszy blok) 10

1010

0101 • wstaw 0101

11

1111

0101

Kubełki na przyszly

wzrost

(21)

Kontynuacja: Jak dalej ma rosnąć?

00 01 10 11

1111 1010

0101 0101 0000

m = 11 (najdalszy blok) i = 2

0 0 0 0

100 101 110 111 3

. . .

100

100

101

101 0101 0101

(22)

Kiedy rozszerzać plik?

• Operacja rozszerzenia jest niezależna od operacji wstawienia

• Śledzimy stopień zapełnienia indeksu U

• Jeśli U wzrosnie powyżej wartości

granicznej, zwiększamy m (być może także i)

(23)

Haszowanie liniowe

+ Obsługuje puchnące pliki

+ marnując mniej miejsca + bez pełnych reorganizacji + Brak pośredniości (jak było przy

rozszerzalnym)

– Niestety dopuszcza strony nadmiarowe

(24)

Przypadek zły

Bardzo pełne

Bardzo puste Zwiększanie

m tylko spowoduje marnowanie miejsca

(25)

B+drzewo czy hasz?

• Haszowanie dobre do zapytań równościowych

SELECT * FROM R

WHERE R.A = 5;

(26)

B+drzewo czy hasz?

• B+drzewa dobre do zapytań zakresowych SELECT *

FROM R

WHERE R.A > 5;

• Ale też równościowych

• I do wielu innych rzeczy. I do złączeń równościowych/nierównościowych itd..

(27)

Definicja indeksu w SQL

• Create index nazw on rel (atr)

• Create unique index nazwa on rel (atr)

Tworzy klucz tabeli I pilnuje go!

• Drop INDEX nazwa

(28)

Niestety, SQL...

• Nie pozwala na specyfikację rodzaju (B+drzewo, Hasz, Bitmap, itd.)

• Nie pozwala na specyfikację parametrów

(wielkość tablicy, współczynnik zapełnienia, itd.)

• Komercyjne SZBD na szczęście to mogą

• Są też idenksy mieszane: zakresowo-haszowe

(29)

Indeks wielowymiarowy

• Jeśli lista atrybutów jest dłuższa, to indeks jest na wielu kluczach

CREATE INDEX foo ON R(bar1,bar2,bar3)

• Zapytanie: Znajdź rekordy spełniające

(30)

Strategia I

• Weź jeden indeks, np. Dept.

• Znajdź rekordy spełniające Dept = “Toy”

i sprawdź ich SAL

I1

(31)

• Weź dwa indeksy, manipuluj wskaźnikami

Toy Sal

> 50k

Strategia II

(32)

• Użyj indeksu wielowymiarowego

I1

I2

I3

Strategia III

(33)

Przykład

Przykładowy rekord

Indeks na DEPT

Indeks

Name=Joe DEPT=Sales SAL=15k

SalesArt Toy

10k15k 17k21k

12k15k 15k19k

(34)

Które zapytania obsłuży?

• Indeks (DEPT, SAL)

• Znajdź rekordy: Dept = “Sales”  SAL=20k

• Znajdź rekordy: Dept = “Sales”  SAL > 20k

• Znajdź rekordy: Dept = “Sales”

• Znajdź rekordy: SAL = 20k

(35)

Dane geograficzne

Dane:

<X1,Y1, Atrybuty>

<X2,Y2, Atrybuty >

x y

. . .

(36)

Zapytania

• Które miasto leży w punkcie <Xi,Yi>?

• Co leży w odległości do 5 km od <Xi,Yi>?

• Jaki obiekt jest najbliższy <Xi,Yi>?

(37)

h

n b

i a

o c

d

10 20

10 20

Przykład

e

g f

m l

k

25 15 35 20 j

40 30 20 10

h i g f d e c a b

• Szukaj punktów bliskich f

• Szukaj punktów bliskich b 5

15 15

(38)

Zapytania do takiego drzewa

• Znajdź punkty takie, że Yi > 20

• Znajdź punkty takie, że Xi < 5

• Znajdź punkty “bliskie” i = <12,38>

• Znajdź punkty “bliskie” b = <7,24>

(39)

Indeks siatkowy

klucz2

X1 X2 …… Xn V1

V2 klucz1

Vn

Do rekordów, w których

(40)

Zalety

• Można szybko znależć odpowiedzi:

– klucz1 = Vi  klucz2 = Xj – klucz1 = Vi

– klucz2 = Xj

• Także zakresowo….

– klucz1  Vi  klucz2 < Xj

(41)

Indeksy siatkowe mają jednak pułapkę

• Jak je ułożyć na dysku?

Jak

tablicę... X1 X2 X3 X4 X1 X2 X3 X4 X1 X2 X3 X4

V1 V2 V3

Problem:

• Musi być regularna, żeby dało się wyliczyć pozycję z <Vi,Xj>

(42)

Rozwiązanie: Pośredniość

Kubełki V1

V2

V3 *Siatka zawiera

V4 jedynie wskaźniki

na kubełki

Kubełki ------ ------

---- -- ---- --

---- -- X1 X2 X3

(43)

Dzięki pośredniości

• Siatka może być regularna bez marnowania miejsca

• Jest jednak pewna cena tej pośredniości...

(44)

Siatka może być też nad zakresami

Salary Siatka

Skala liniowa

1 2 3

Toy Sales Personnel

0-20K 1

20K-50K 2 50K- 8 3

(45)

Pliki siatkowe

Skuteczne wyszukiwanie wg wielu kluczy Narzuty i zarządzanie miejscem

(nic nie jest za darmo)

Trzeba znaleźć podziały zakresu, które równo rozrzucają klucze

+ -

-

(46)

Partycjonowana f. haszująca

klucz1 h1 h2 klucz2

010110 1110010

(47)

h1(toy) =0 000 h1(sales) =1 001 h1(art) =1 010

. 011

h2(10k). =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111

..

<Fred,toy,10k>,<Joe,sales,10k>

Przykład:

<Joe><Sally>

<Fred>

(48)

h1(toy) =0 000 h1(sales) =1 001

h1(art) =1 010

. 011

h2(10k). =01 100

h2(20k) =11 101

h2(30k) =01 110

h2(40k) =00 111

..

• Znajdź Emp takich, że Dept. = Sales  Sal=40k

<Fred>

<Joe><Jan>

<Mary>

<Sally>

<Tom><Bill>

<Andy>

(49)

h1(toy) =0 000 h1(sales) =1 001

h1(art) =1 010

. 011

h2(10k). =01 100

h2(20k) =11 101

h2(30k) =01 110

h2(40k) =00 111

..

• Znajdź Emp takich, że Sal=30k

<Fred>

<Joe><Jan>

<Mary>

<Sally>

<Tom><Bill>

<Andy>

szukaj tu

(50)

h1(toy) =0 000 h1(sales) =1 001

h1(art) =1 010

. 011

h2(10k). =01 100 h2(20k) =11 101 h2(30k) =01 110 h2(40k) =00 111

..

• Znajdź Emp takich, że Dept. = Sales

<Fred>

<Joe><Jan>

<Mary>

<Sally>

<Tom><Bill>

<Andy>

szukaj tu

Cytaty

Powiązane dokumenty

(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

• Indeks niepogrupowany jest dobry, gdy używające go zapytania zwracają znacznie mniej rekordów niż jest stron w tabeli. •

• DISTINCT jest zbędny, ponieważ ssnum jest kluczem w employee, więc też i kluczem w podzbiorze relacji employee...