Transcript wyklad04

Systemy zarządzania bazami
danych
4. Haszowanie i więcej wymiarów
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
1
Haszowanie
• klucz  h(klucz)
<klucz>
.
.
.
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
Kubełki
(zwykle 1
blok dysku)
2
Indeks haszowany wewnętrzny
.
.
.
(1) klucz  h(klucz)
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
rekordy
.
.
.
3
Indeks haszowany zewnętrzny
(2) klucz  h(klucz)
klucz 1
rekord
Indeks
• Indeksy drugorzędne mogą by tylko
zewnętrzne
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
4
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
5
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
6
Strona nadmiarowa
Wstawienie:
h(a) = 1
h(b) = 2
h(c) = 1
h(d) = 0
0
d
1
a
c
2
b
e
3
h(e) = 1
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
7
Usuwanie
Usuń:
e
f
c
0
a
1
b
c d
e
2
3
Oryginał: Hector Garcia-Molina
f
g
d
Może
przesunąć
“g” w górę?
4. Haszowanie i więcej wymiarów
8
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
9
Radzenie sobie ze wzrostem
• Strony nadmiarowe i reorganizacje
• Haszowanie dynamiczne
• Rozszerzalne
• Liniowe
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
10
Haszowanie rozszerzalne
(a) Patrzymy na i spośród b bitów wyniku
funkcji haszującej
b
h(K) 
00110101
i  rośnie z upływem czasu…
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
11
(b) Tworzymy katalog
h(K)[i ]
.
.
.
do kubełka
.
.
.
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
12
Przykład: h(k) ma 4 bity; 2 klucze/kubełek
1
0001
i= 1
i=2
00
01
1 2
1001
1010 1100
Wstaw 1010
Oryginał: Hector Garcia-Molina
1 2
1100
4. Haszowanie i więcej wymiarów
10
11
Nowy katalog
13
Kontynuacja przykładu
i= 2
00
01
10
11
Wstaw:
0111
2
0000
0001
1 2
0001 0111
0111
2
1001
1010
2
1100
0000
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
14
Kontynuacja przykładu
0000 2
i= 2
0001
00
0111 2
01
10
11
Wstaw:
1001
Oryginał: Hector Garcia-Molina
1001 3
1001
1010 1001 2 3
1010
1100 2
4. Haszowanie i więcej wymiarów
i=3
000
001
010
011
100
101
110
111
15
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...
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
16
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)
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
17
Haszowanie liniowe
Dwa pomysły:
(a) Używaj i młodszych bitów
funkcji
b
01110101
wzrost
i
(b) Plik rośnie liniowo
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
18
Przykład b=4 bity,
0101
0000
1010
00
i =2, 2 klucze/kubełek
• wstaw 0101
• mogą być strony nadmiarowe !
Kubełki
na przyszly
wzrost
0101
1111
01
10
11
m = 01 (najdalszy używany blok)
Reg.
Jeśli h(k)[i ]  m, to
szukaj w kubełku h(k)[i ]
wpp, szukaj w kubełku h(k)[i ] - 2i -1
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
19
Przykład b=4 bity,
0101
0000
1010
00
i =2, 2 klucze/kubełek
• wstaw 0101
0101
0101
1111
1010
1111
01
10
11
Kubełki
na przyszly
wzrost
m = 01 (najdalszy blok)
10
11
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
20
Kontynuacja: Jak dalej ma rosnąć?
i=2 3
0000
0 00
100
0101
0101
0 01
101
1010
010
110
0101
0101
1111
0 11
111
100
101
...
m = 11 (najdalszy blok)
100
101
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
21
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)
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
22
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
23
Przypadek zły
Bardzo pełne
Bardzo puste
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
Zwiększanie
m tylko
spowoduje
marnowanie
miejsca
24
B+drzewo czy hasz?
• Haszowanie dobre do zapytań równościowych
SELECT *
FROM R
WHERE R.A = 5;
• I tylko do nich. I do złączeń... równościowych
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
25
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..
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
26
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
27
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
28
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
DEPT = “Toy” AND SAL > 50k
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
29
Strategia I
• Weź jeden indeks, np. Dept.
• Znajdź rekordy spełniające Dept = “Toy”
i sprawdź ich SAL
I1
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
30
Strategia II
• Weź dwa indeksy, manipuluj wskaźnikami
Toy
Oryginał: Hector Garcia-Molina
Sal
> 50k
4. Haszowanie i więcej wymiarów
31
Strategia III
• Użyj indeksu wielowymiarowego
I2
I1
Oryginał: Hector Garcia-Molina
I3
4. Haszowanie i więcej wymiarów
32
Przykład
Art
Sales
Toy
Indeks
na DEPT
10k
15k
17k
21k
12k
15k
15k
19k
Przykładowy
rekord
Name=Joe
DEPT=Sales
SAL=15k
Indeks
na SAL
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
33
Które zapytania obsłuży?
• Indeks (DEPT, SAL)
•
•
•
•
Znajdź
Znajdź
Znajdź
Znajdź
rekordy:
rekordy:
rekordy:
rekordy:
Oryginał: Hector Garcia-Molina
Dept = “Sales”  SAL=20k
Dept = “Sales”  SAL > 20k
Dept = “Sales”
SAL = 20k
4. Haszowanie i więcej wymiarów
34
Dane geograficzne
Dane:
y
x
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
...
<X1,Y1, Atrybuty>
<X2,Y2, Atrybuty >
35
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>?
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
36
Przykład
40
10
25
20
20
10
e
h
30
20
15 35
i
n
o
j
k
m
10
5
h i
d e
f
15
15
j k
g
l
m
c
b
f
l
a
d
c
g
20
a b
• Szukaj punktów bliskich f
• Szukaj punktów bliskich b
n o
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
37
Zapytania do takiego drzewa
•
•
•
•
Znajdź
Znajdź
Znajdź
Znajdź
punkty
punkty
punkty
punkty
Oryginał: Hector Garcia-Molina
takie, że Yi > 20
takie, że Xi < 5
“bliskie” i = <12,38>
“bliskie” b = <7,24>
4. Haszowanie i więcej wymiarów
38
Indeks siatkowy
klucz2
V1
V2
X1 X2
……
Xn
klucz1
Vn
Do rekordów, w których
klucz1=V3, klucz2=X2
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
39
Zalety
• Można szybko znależć odpowiedzi:
– klucz1 = Vi  klucz2 = Xj
– klucz1 = Vi
– klucz2 = Xj
• Także zakresowo….
– klucz1  Vi  klucz2 < Xj
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
40
Indeksy siatkowe mają jednak pułapkę
• Jak je ułożyć na dysku?
V3
X1
X2
X3
X4
V2
X1
X2
X3
X4
X1
X2
X3
X4
Jak
tablicę...
V1
Problem:
• Musi być regularna, żeby dało się
wyliczyć pozycję z <Vi,Xj>
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
41
Rozwiązanie: Pośredniość
V1
V2
V3
V4
X1 X2 X3
Kubełki
Oryginał: Hector Garcia-Molina
----------
----
Kubełki
*Siatka zawiera
jedynie wskaźniki
na kubełki
----
4. Haszowanie i więcej wymiarów
42
Dzięki pośredniości
• Siatka może być regularna bez marnowania
miejsca
• Jest jednak pewna cena tej pośredniości...
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
43
Siatka może być też nad zakresami
Salary
Siatka
1
2
50K-
3
8
0-20K
20K-50K
Skala
liniowa
Oryginał: Hector Garcia-Molina
1
2
3
Toy Sales Personnel
4. Haszowanie i więcej wymiarów
44
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
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
45
Partycjonowana f. haszująca
010110 1110010
klucz1
Oryginał: Hector Garcia-Molina
h1
h2
4. Haszowanie i więcej wymiarów
klucz2
46
Przykład:
h1(toy)
h1(sales)
h1(art)
.
.
h2(10k)
h2(20k)
h2(30k)
h2(40k)
.
.
Wstaw
=0
=1
=1
=01
=11
=01
=00
000
001
010
011
100
101
110
111
<Fred>
<Joe><Sally>
<Fred,toy,10k>,<Joe,sales,10k>
<Sally,art,30k>
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
47
h1(toy)
=0
h1(sales) =1
h1(art)
=1
.
.
h2(10k)
=01
h2(20k)
=11
h2(30k)
=01
h2(40k)
=00
.
.
• Znajdź Emp takich,
Oryginał: Hector Garcia-Molina
000
001
010
011
100
101
110
111
<Fred>
<Joe><Jan>
<Mary>
<Sally>
<Tom><Bill>
<Andy>
że Dept. = Sales  Sal=40k
4. Haszowanie i więcej wymiarów
48
h1(toy)
=0
h1(sales) =1
h1(art)
=1
.
.
h2(10k)
=01
h2(20k)
=11
h2(30k)
=01
h2(40k)
=00
.
.
• Znajdź Emp takich,
Oryginał: Hector Garcia-Molina
000
001
010
011
100
101
110
111
<Fred>
<Joe><Jan>
<Mary>
<Sally>
<Tom><Bill>
<Andy>
że Sal=30k
4. Haszowanie i więcej wymiarów
szukaj tu
49
h1(toy)
h1(sales)
h1(art)
.
.
h2(10k)
h2(20k)
h2(30k)
h2(40k)
.
.
=0
=1
=1
=01
=11
=01
=00
000
001
010
011
100
101
110
111
<Fred>
<Joe><Jan>
<Mary>
<Sally>
<Tom><Bill>
<Andy>
szukaj tu
• Znajdź Emp takich, że Dept. = Sales
Oryginał: Hector Garcia-Molina
4. Haszowanie i więcej wymiarów
50