pobierz plik referatu - BDAS

Transkrypt

pobierz plik referatu - BDAS
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Rozdział 4
w
Przegląd technik kompresji map bitowych dla
zastosowań w hurtowniach danych
w
da
.b
w
Streszczenie. Indeksy bitmapowe stanowią jeden z głównych rodzajów indeksów stosowanych w optymalizacji zapytań analitycznych w hurtowniach
danych. W najprostszym podejściu, indeks bitmapowy jest zbiorem tzw. map
bitowych. Mapa bitowa jest wektorem bitów i jest tworzona dla każdej wartości indeksowanego atrybutu. Mapa taka opisuje rekordy posiadające określoną wartość indeksowanego atrybutu. Do zalet indeksów bitmapowych zalicza się: (1) dużą efektywność wyszukiwania danych z równościowymi warunkami selekcji i (2) ich mały rozmiar dla indeksowanych atrybutów o wąskich dziedzinach. Natomiast, dla indeksowanych atrybutów o szerokich dziedzinach indeksy bitmapowe osiągają ogromne rozmiary i w konsekwencji
oferują gorszą efektowność. Z tego względu, w praktyce stosuje się różne
techniki kompresji indeksów bitmapowych. W niniejszym artykule zostaną
omówione różne techniki kompresji, m.in. gzip, BBC, WAH i RLH.
1 Wprowadzenie
pl
s.
Hurtownie danych (HD) (ang. data warehouses) są niezastąpionym komponentem systemów wspomagających zarządzanie i podejmowanie decyzji w instytucjach i przedsiębiorstwach. Wyróżnia się dwa podstawowe cele stosowania HD. Po pierwsze, zapewnienie
integracji danych pochodzących z wielu autonomicznych, heterogenicznych i rozproszonych źródeł danych. Po drugie, dostarczenie platformy tzw. przetwarzania analitycznego –
OLAP (ang. On-Line Analytical Processing), które umożliwia wykonywanie zaawansowanych analiz danych. Wyniki tych analiz stanowią podstawę podejmowania decyzji zarządczych w instytucjach i przedsiębiorstwach.
Jednym z głównych problemów technologicznych w hurtowniach danych jest optymalizacja zapytań analitycznych. Zapytania analityczne odczytują ogromne wolumeny danych.
Typową klasą zapytań analitycznych są tzw. zapytania gwiaździste (ang. star queries), które
łączą wiele tabel wymiarów z tabelą faktów, filtrują dane poprzez nałożenie warunków selekcji zarówno na atrybuty tabel faktów jak i wymiarów, oraz agregują dane. Dla zapytań
Jan Chmiel, Michał Stabno
QXL Poland Sp. z. o. o., Ul. Marcelińska 90, 60-324, Poznań,
Politechnika Poznańska, Instytut Informatyki, Ul. Piotrowo 2, 60-965 Poznań
email:{Jan.Chmiel, Michal.Stabno}@allegro.pl
Robert Wrembel
Politechnika Poznańska, Instytut Informatyki, Ul. Piotrowo 2, 60-965 Poznań
email: [email protected]
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
w
o takiej charakterystyce, standardowe indeksy w postaci B-drzew okazują się nieefektywne,
ponieważ po pierwsze, nie zapewniają wystarczająco szybkiego dostępu do danych, po drugie, ich rozmiary są zbyt duże, przez co wzrastają koszty ich przetwarzania, przechowywania i utrzymywania. Z tego względu, w zastosowaniach hurtowni danych bardzo często stosuje się tzw. indeksy bitmapowe (ang. bitmap indexes).
Ich zaletą jest duża efektywność wyszukiwania danych dla kryteriów poszukiwania
z operatorem równościowym. Ponadto, dla indeksowanych atrybutów o wąskiej dziedzinie
rozmiary indeksów bitmapowych są znacznie mniejsze niż indeksów typu B-drzewo.
Główną wadą indeksów bitmapowych jest ich duży rozmiar (wielokrotnie większy niż Bdrzew) dla atrybutów o szerokich dziedzinach. W celu zmniejszenia rozmiarów indeksów
bitmapowych, w praktyce stosuje się ich kompresowanie.
Celem niniejszego rozdziału jest omówienie podstawowych technik kompresji wykorzystywanych w procesie kompresowania indeksów bitmapowych. W rozdziale omówiono następujące techniki kompresji: gzip, kompresję Huffmana, BBC, WAH, RLH, RLH-1024.
Struktura pracy jest następująca: w podrozdziale 2 przedstawiono podstawową koncepcję indeksu bitmapowego, w podrozdziale 3 omówiono techniki kompresji, w podrozdziale
4 porównano własności poszczególnych technik kompresji, a w podrozdziale 5 podsumowano pracę.
w
w
da
.b
2 Podstawowy indeks bitmapowy
pl
s.
Podstawowy indeks bitmapowy [7], [8] bazuje na tzw. mapach bitowych umożliwiających
znalezienie rekordów z zadaną wartością indeksowanego atrybutu. Mapa bitowa jest wektorem bitów. Każda wartość z dziedziny indeksowanego atrybutu posiada odrębną mapę.
Liczba bitów każdej mapy jest identyczna i odpowiada liczbie rekordów indeksowanej tabeli. Mapa bitowa utworzona dla wartości w indeksowanego atrybutu A opisuje te rekordy,
których wartością atrybutu A jest w. Bit o numerze n przyjmuje wartość 1 w mapie, jeśli
atrybut A rekordu o numerze n przyjmuje wartość w. W przeciwnym przypadku bit n przyjmuje wartość 0.
Jako przykład ilustrujący powyższą koncepcję indeksu bitmapowego rozważmy tabelę
Klienci, której fragment przedstawiono poniżej. Na atrybucie płeć zdefiniowano indeks bitmapowy, przedstawiony w Tabeli 1. Ponieważ dziedziną indeksowanego atrybutu płeć są
dwie wartości, tj. 'kobieta' i 'mężczyzna', więc indeks bitmapowy składa się z dwóch map
bitowych. Bit pierwszy mapy opisującej wartości 'kobieta' ma wartość 0, ponieważ wartością atrybutu płeć dla pierwszego rekordu nie jest 'kobieta', itp.
Indeksy bitmapowe posiadają znacznie mniejsze rozmiary od indeksów w postaci Bdrzewa dla atrybutów, które posiadają wąską dziedzinę (kilka do kilkudziesięciu różnych
wartości), dla tabel o dużej liczbie rekordów, np. miliony. Przykładowo, dla tabeli zawierającej milion rekordów i liczności dziedziny indeksowanego atrybutu równej 4 indeks bitmapowy będzie złożony z 4 map bitowych o długości miliona bitów każda. Rozmiar takiego indeksu będzie więc równy około 500 kB. Indeks B-drzewo utworzony na tym samym
atrybucie, przyjmując rozmiar wskaźnika do rekordu równy 10 B, będzie miał rozmiar 10
MB.
Indeksy bitmapowe sprawdzają się dla określonej klasy zapytań. Są to zapytania wykorzystujące dużą liczbę warunków selekcji z operatorami równości oraz zapytania wykorzystujące funkcję count. Większa efektywność tych indeksów wynika z: (1) dużej szybkości
przetwarzania map bitowych za pomocą operatorów and, or i not, (2) małego rozmiaru indeksów bitmapowych dla atrybutów o wąskiej dziedzinie, (3) możliwości wykonywania
52
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
operacji logicznych i funkcji count bezpośrednio na indeksach bitmapowych (znajdujących
się w pamięci operacyjnej), a nie na samych rekordach.
Tabela 1. Przykładowa tabela Klienci i indeks bitmapowy na atrybucie płeć
w
da
.b
w
w
Główną wadą indeksów bitmapowych jest ich duży rozmiar dla atrybutów o szerokich dziedzinach. W konsekwencji efektywność przetwarzania takiego indeksu zmaleje. Przykładowo, dla tabeli zawierającej milion rekordów i liczności dziedziny indeksowanego atrybutu
równej 200 indeks bitmapowy będzie złożony z 200 map bitowych o długości miliona bitów każda. Rozmiar takiego indeksu będzie więc równy około 100 MB. Indeks B-drzewo
utworzony na tym samym atrybucie, będzie miał cały czas rozmiar 10 MB. Opisany tu problem w literaturze często nazywa się problemem rozmiaru.
3 Techniki kompresji
pl
s.
W praktyce, problem rozmiaru jest rozwiązywany poprzez użycie różnych technik kompresji map bitowych. Dotychczas w literaturze naukowo-technicznej zaproponowano wiele
efektywnych technik kompresji map bitowych, z których kilka wykorzystywanych jest
w produktach komercyjnych. Takie techniki zapewniają znaczący współczynnik kompresji.
Jednocześnie, przetwarzanie zapytań wykorzystujących skompresowane mapy bitowe może
się okazać bardziej czasochłonne niż z użyciem nieskompresowanych map bitowych. Ten
problem zainspirował opracowanie specjalizowanych schematów kompresji takich jak:
Byte-aligned Bitmap Code (BBC) [1] i Word-Aligned Hybrid (WAH) [12], [13], [14]. Specjalizowane schematy kompresji map bitowych zastępują tradycyjnie używane w hurtowniach danych techniki kompresji ogólnego przeznaczenia, np. GZIP [3]. We wspomnianych
technikach kompresji, algorytm kompresji jest stosowany do każdej z map bitowych niezależnie.
Efektywność korzystania ze skompresowanego indeksu bitmapowego jest mierzona sumą czasu dostępu do mapy bitowej na dysku i czasu przetwarzania mapy bitowej (dekompresja, operacje bitowe). Oznacza to, że dla hurtowni danych dobry współczynnik kompresji nie jest jedyną pożądaną własnością schematu kompresji map bitowych. Czas dekompresji staje się równie istotny.
53
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
w
Bardzo trudno jest optymalizować współczynnik kompresji i czas przetwarzania map
bitowych jednocześnie. W hurtowniach danych czas przetwarzania jest bardziej istotny, zatem wystarczy by schemat kompresji jedynie gwarantował, że całkowita wielkość skompresowanych map bitowych indeksu bitmapowego była mniejsza od wielkości struktur odpowiadającego temu przypadkowi indeksu B-drzewo. W przypadku, gdy ten warunek jest
spełniony, czas poświęcany na operacje dyskowe dla skompresowanego indeksu bitmapowego będzie mniejszy do czasu poświeconego na operacje dyskowe dla indeksu B-drzewo.
Dobrze znana i powszechnie stosowana kompresja GZIP oferuje tylko dobry współczynnik
kompresji. W przypadku kompresji BBC i WAH dobre czasy odpowiedzi na zapytania
uzyskiwane są kosztem dobrego współczynnika kompresji (w akceptowalnych granicach
wspomnianych wcześniej).
Jako alternatywę do kompresji BBC i WAH, opracowano w Instytucie Informatyki
Politechniki Poznańskiej, tzw. kompresję RLH (ang. Run-Length Huffman) [9], [10]. Podobnie jak BBC i WAH, kompresja RLH wykorzystuje kodowanie run-length w powiązaniu z algorytmem kodowania Huffmana [11]. W kompresji RLH zliczaniu podlegają odległości pomiędzy kolejnymi bitami o wartości jeden, a nie długości jednorodnych ciągów bitów o tej samej wartości. W kolejnych podrozdziałach zostaną scharakteryzowane
wspomniane wyżej techniki kompresji.
w
w
3.1 Algorytm Huffmana
da
.b
pl
s.
Kompresja Huffmana [11] to jedna z najprostszych i łatwiejszych w implementacji technik
kompresji bezstratnej. Algorytm kompresji nie należy do najefektywniejszych systemów
bezstratnej kompresji danych, dlatego też praktycznie nie używa się go samodzielnie.
Często wykorzystuje się go jako ostatni etap w różnych systemach kompresji, zarówno
bezstratnej jak i stratnej, np. MP3 lub JPEG. Pomimo, że nie jest on doskonały, stosuje się
go ze względu na prostotę oraz brak ograniczeń patentowych.
Sposób działania algorytmu jest stosunkowo prosty. W pierwszym kroku określamy
prawdopodobieństwo lub częstość występowania każdego symbolu ze zbioru danych podlegających kodowaniu. W drugim kroku tworzymy listę węzłów postaci: symbol – prawdopodobieństwo (częstość) jego występowania. W trzecim kroku budujemy tzw. drzewo kodów Huffmana. Usuwamy z listy dwa węzły o najmniejszym prawdopodobieństwie (częstości wystąpień) i wstawiamy węzeł, który staje się rodzicem dla tych dwóch węzłów
o wartości równej sumie prawdopodobieństw (częstości wystąpień) dwóch usuniętych węzłów. Nowy węzeł nie przechowuje symbolu. Operacje te powtarzamy do momentu, gdy na
liście pozostanie jeden węzeł. Wartość zapisana w korzeniu jest sumą prawdopodobieństw
(częstości) występowania wszystkich symboli w kompresowanym zbiorze danych.
W liściach drzewa znajdują się kodowane symbole.
Algorytm kompresji Huffmana nie określa sposobu wyboru węzłów z listy o tych samych prawdopodobieństwach (częstościach wystąpień), dlatego też jest algorytmem niedeterministycznym. Nieokreślone jest również, który z węzłów staje się lewym, a który prawym potomkiem. Nie ma to jednak znaczenia, gdyż długość kodu symbolu w liściu drzewa
kodów Huffmana nie zmienia się.
Sposób tworzenia kodów na podstawie drzewa kodów Huffmana jest równie prosty, co
budowa drzewa. Każdej lewej krawędzi w drzewie przyporządkowujemy wartość 0, a każdej prawej krawędzi wartość 1. Następnie przechodzimy w głąb drzewa zaczynając od korzenia aż do liścia zawierającego określony symbol. Przechodząc przez krawędź oznaczoną
0 dopisujemy do kodu wartość 0. Przechodząc przez krawędź oznaczoną 1 dopisujemy do
kodu wartość 1.
54
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
Działanie algorytmu Huffmana ilustruje przykład przedstawiony poniżej, w którym dokonamy kompresji następującego ciągu symboli:
AAABBABBCCDCAAA
Kolejne kroki algorytmu będą przebiegały następująco:
− Krok 1: Tworzymy listę symboli A, B, C, D wraz z ich częstościami wystąpień. Listę
częstości wystąpień sortujemy malejąco.
w
Tabela 2. Ilustracja działania algorytmu Huffmana: Krok 1
Lista częstości wystąpień
Symbol
Częstość wystąpień
w
A
7
B
4
C
3
D
1
da
.b
w
− Krok 2: Rozpoczynamy budowę drzewa kodów Huffmana. Każdy symbol i jego
częstość tworzą jeden z liści drzewa kodów Huffmana. Lista zawiera węzły, które
jeszcze nie zostały wykorzystane przy budowie drzewa. Z listy wybieramy dwa
symbole o najmniejszych częstościach wystąpień. W naszym przykładzie są to
symbole C i D. Usuwamy je z listy i dodajemy nowy symbol X1 o wartości częstości
wystąpień równej sumie częstości wystąpień węzłów C i D, czyli 4. Węzeł X1 pełni
rolę rodzica węzłów C i D.
Lista wystąpień
Symbol
Częstość wystąpień
A
7
B
4
X1
4
O
Drzewo kodów Huffmana
X1
1
D
C
pl
s.
Rys. 1. Ilustracja działania algorytmu Huffmana: Krok 2
− Krok 3: Usuwamy z listy węzły B i X1, a na ich miejsce wstawiamy do listy węzeł
X2 o wartości równej sumie częstości wystąpień zawartych w węzłach B i X1, czyli
8. Węzeł X2 pełni rolę rodzica dla węzłów B i X1.
Lista wystąpień
Symbol
Częstość wystąpień
X2
8
A
7
Drzewo kodów Huffmana
X2
O
O
D
X1
1
B
1
C
Rys. 2. Ilustracja działania algorytmu Huffmana: Krok 3
55
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
− Krok 4: Usuwamy z listy węzły A i X2, a na ich miejsce wstawiamy węzeł X3 o
wartości równej sumie częstości wystąpień węzłów A i X2, czyli 15. Węzeł X3 pełni
rolę rodzica węzłów A i X2 w drzewie kodów Huffmana. Ponieważ na liście
znajduje się tylko jeden węzeł, algorytm kończy pracę.
Lista wystąpień
Symbol
Częstość wystąpień
w
X3
15
Drzewo kodów Huffmana
X3
O
1
A
X2
w
O
X1
O
1
B
1
D
C
w
Rys. 3. Ilustracja działania algorytmu Huffmana: Krok 4
Częstość
występowania
symbolu
da
.b
W celu uzyskania kodów dla symboli przechodzimy poprzez drzewo od korzenia do liści:
− A: lewo: 0
− B: prawo→ prawo: 11
− C: prawo→ lewo→ prawo: 101
− D: prawo→ lewo→ lewo: 100
Średnią długość uzyskanych kodów symboli można obliczyć sumując iloczyny częstości
wystąpień symboli przez długość ich kodów i dzieląc sumę przez sumę częstości wystąpień
wszystkich symboli. W naszym przypadku średnia długość kodu symbolu wynosi:
( 7 * 1 + 4 * 2 + 3 * 3 + 1 * 3 ) / 15 = (7 + 8 + 9 + 3) / 15 =27 / 15 = 9 / 5 = 1.8 bitów
Liczba bitów
kodu symbolu
Suma częstości występowania
wszystkich symboli
pl
s.
W trywialnym kodowaniu symboli o stałej długości na jeden symbol potrzebujemy 2 bity.
Uzyskane kody symboli stanowią rozwiązanie optymalne, tzn. nie da się uzyskać innych
kodów symboli o zmiennej długości, dla których zakodowany ciąg danych byłby krótszy.
Po zakodowaniu, ciąg danych AAABBABBCCDCAAA ma postać binarną:
000111101111101101100101000. Wraz z zakodowanym ciągiem danych przechowujemy
listę wystąpień częstości symboli i same symbole. Posłużą one do odbudowy drzewa kodów Huffmana w momencie dokonywania dekompresji ciągu.
Dekompresja nie jest złożona obliczeniowo i przebiega strumieniowo. Czytamy zakodowany ciąg danych po jednym bicie. Zaczynając od korzenia drzewa kodów Huffmana i w
zależności od wartości odczytanego bitu, przechodzimy do lewego lub prawego potomka.
Kiedy wybrany wierzchołek drzewa jest liściem (nie posiada już żadnych potomków) zapisujemy symbol przechowywany w liściu do zdekodowanego ciągu danych i powracamy do
korzenia drzewa kodów Huffmana. Proces ten kontynuujemy do wyczerpania bitów ze strumienia bitów zakodowanego ciągu.
56
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
3.2 Kompresja GZIP
w
W celu zrozumienia działania schematów kompresji BBC i WAH konieczna jest znajomość
struktury typowego schematu kompresji ogólnego przeznaczenia. Jako przykład zostanie
użyty schemat kompresji GZIP. Algorytm ten bazuje na algorytmie DEFLATE [4], który
jest złożeniem algorytmu LZ77 [5] oraz algorytmu kodowania Huffmana [11].
Algorytm LZ77 należy do klasy tzw. koderów słownikowych (ang. dictionary coders).
Algorytm zamienia ciągi danych na referencje do pasujących ciągów danych, które
wystąpiły już wcześniej w strumieniu danych. Dopasowany ciąg danych jest kodowany
dwoma wartościami: długością pasującego ciągu danych, oraz przesunięciem pomiędzy
początkiem referowanego ciągu, a pasującego ciągu danych występującego wcześniej w nie
skompresowanym strumieniu danych. W celu poszukiwania pasujących ciągów danych
koder musi buforować część strumienia danych. Dekoder również utrzymuje fragment
strumienia danych w celu zinterpretowania referencji na wyniki znalezione przez koder.
Najważniejsze kroki algorytmu LZ77 ilustruje poniższy przykład:
w
Bufor kodera
11114526
14575
w
Bufor słownika
Nieodczytany strumień danych
5 2 6 3 2 5......
Rys. 4. Odczyt przykładowego strumienia danych przez LZ77
da
.b
3.3 Kompresja BBC
pl
s.
Przyjmijmy, że kompresji podlega ciąg symboli 1111452614575526325... Do bufora
słownika mamy już wczytany ciąg symboli: 11114526. Koder poszukuje w buforze słownika najdłuższego ciągu symboli zgodnego z prefiksem swojego buforu. W tym przypadku
taki warunek spełnia ciąg symboli 145. Jest to najdłuższy ciąg symboli od początku bufora
kodera, który występuje w buforze słownika. Ciągowi temu zostaje przyporządkowana para
liczb: jego długość równa 3 oraz offset przesunięcia względem pozycji pasującego ciągu
w słowniku równy 5. Następnie bufor słownika i bufor kodera zostają przesunięte w prawo
o długość dopasowanego ciągu, czyli o 3.
W drugiej fazie algorytmu DEFLATE, ciągi danych, ich długości oraz offsety uzyskane
przez algorytm LZ77 w pierwszej fazie są kodowane z użyciem algorytmu kodowania
Huffmana. GZIP dzieli ciągi bitów na segmenty mające maksymalną długość do 65535
bitów i kompresuje je z użyciem algorytmu LZ77 i kodowania Huffmana. Każdy segment
posiada własne drzewo kodów Huffmana, które również jest kompresowane i zapisywane
z odpowiadającym mu skompresowanym segmentem.
Technika kompresji BBC (ang. Byte-aligned Bitmap Code) [Ant94] została oparta o tak
zwane kodowanie run-length. W kodowaniu run-length przyjmuje się, że ciągi bitów o jednakowych wartościach są reprezentowane jako wartości długości tych ciągów. Na przykład,
dla ciągu bitów 11100001011 kodowanie run-length ma postać: 34112. Pierwsze trzy bity
kodowanego ciągu o wartości jeden zapisujemy jako 3, cztery następne bity o wartości zero
zapisujemy jako 4, itd. W przypadku schematu kompresji BBC nałożono jeszcze jeden dodatkowy warunek. Ciąg bitów w mapie bitowej został podzielony na bajty. Bajty zostały
następnie pogrupowane w tak zwane przebiegi (ang. runs). Przebieg składa się ze słowa będącego wypełnieniem (ang. fill), lub dopełnieniem (ang. tail). Wypełnienie reprezentuje ciąg
bajtów złożonych z bitów o tej samej wartości. Dopełnienie (ang. tail) reprezentuje ciąg
bajtów złożonych z bitów o różnych wartościach. Podział mapy bitowej na bajty ogranicza
57
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
miarę długości jednorodnych ciągów bitów do wartości będących wielokrotnością długości
jednego bajtu.
Każdy przebieg w schemacie kompresji BBC ma postać:
[wypełnienie][dopełnienie].
w
W zależności od długości wypełnienia oraz struktury dopełnienia wyróżnia się cztery
typy przebiegów:
− Przebieg typu 1-Run. Przebieg ten jest przeznaczony do reprezentacji wypełnienia o
długości od 0 do 3 bajtów i dopełnienia o długości od 0 do 15 bajtów. Przebieg typu
1-Run posiada nagłówek złożony z jednego bajtu postaci:
1[Bit wypełnienia][długość wypełnienia(2 bity)][długość dopełnienia(4 bity)]
w
w
Bajty dopełnienia znajdują się po bajcie nagłówka. Przebieg typu 1-Run ilustruje następujący przykład:
Nieskompresowana mapa bitowa:
00000000
00000000
10001010
00110111
Przebieg typu 1-Run
{1}{0}{10}{0010}
{10001010
00110111}
Liczba bajtów
Liczba bajtów
dopełnienia (4 bity)
wypełnienia (2 bity)
da
.b
Bit oznaczający typ
przebiegu (1 bit)
Wartość bitów
wypełnienia
(1 bit)
Dwa bajty
dopełnienia
Rys. 5. Przykład przebiegu 1-Run
− Przebieg typu 2-Run. Przebieg ten jest przeznaczony do reprezentacji wypełnienia
o długości od 0 do 3 bajtów i dopełnienia złożonego z jednego bajtu posiadającego
jeden bit różny od bitów wypełnienia. Przebieg typu 2-Run posiada nagłówek złożony z jednego bajtu postaci:
01[Bit wypełnienia][długość wypełnienia(2 bity)][pozycja różniącego się bitu
w dopełnieniu(3 bity)]
pl
s.
Bajt dopełnienia nie jest przechowywany. Przebieg ten ilustruje następujący przykład:
Nieskompresowana mapa bitowa:
00000000
00000000
00000000
00000010
Bity
oznaczające
typ przebiegu
(2 bity)
Przebieg typu 2-Run
{01}{0}{11}{001}
Wartość bitów
wypełnienia (1 bit)
Pozycja różniącego się bitu
Liczba bajtów
dopełnienia (3 bity)
wypełnienia (2 bity)
Rys. 6. Przykład przebiegu 2-Run
− Przebieg typu 3-Run. Przebieg ten jest przeznaczony do reprezentacji wypełnienia
o rozmiarze większym niż 3 bajty i dopełnienia złożonego od 0 do 15 bajtów. Wielo58
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
bajtowy licznik reprezentuje długość wypełnienia. Przebieg typu 3-Run posiada nagłówek złożony z jednego bajtu postaci:
001[bit wypełnienia][długość dopełnienia (4 bity) ].
Bajty wielobajtowego licznika następują po nagłówku. Następnie znajdują się bajty dopełnienia. Każdy bajt licznika wielobajtowego (z wyjątkiem ostatniego) ma postać:
1[ (7 bitów) przechowywana wartość]
w
Bity
oznaczające
typ przebiegu
(3 bity)
w
w
Ostatni bajt licznika ma wartość pierwszego bitu równą 0. Liczba bajtów w dopełnieniu jest
równa wartości licznika powiększonego o 4. Przebieg 3-Run ilustruje następujący przykład:
Nieskompresowana mapa bitowa:
00000000
00000000
00000000
00000000
00000000
11110011
Przebieg typu 3-Run
{001}{0}{0001}
{0}{0000001}
{11110011}
Liczba
Wartość bitów bajtów
wypełnienia wypełnienia
(1 bit)
(4 bity)
Bit końca
licznika (1 bit)
Licznik bajtów
wypełnienia (7 bitów)
Bajt
dopełnienia
da
.b
Rys. 7. Przykład przebiegu 3-Run
− Przebieg typu 4-Run. Przebieg ten jest przeznaczony do reprezentacji wypełnienia o
rozmiarze większym niż 3 bajty i dopełnienia złożonego z jednego bajtu
posiadającego jeden bit różny od bitów wypełnienia. Przebieg typu 4-Run posiada
nagłówek złożony z jednego bajtu postaci:
0001[Bit wypełnienia][pozycja różniącego się bitu w dopełnieniu(3 bity)]
Bajt dopełnienia nie jest przechowywany. Bajty wielobajtowego licznika następują po nagłówku. Następnie znajdują się bajty dopełnienia. Każdy bajt licznika wielobajtowego (z
wyjątkiem ostatniego) ma postać:
pl
s.
1[ (7 bitów) przechowywana wartość]
Ostatni bajt licznika ma wartość pierwszego bitu równą 0. Liczba bajtów w dopełnieniu jest
równa wartości licznika powiększonego o 4. Przebieg typu 4-Run ilustruje następujący
przykład:
Nieskompresowana mapa bitowa:
00000000
00000000
00000000
00000000
00000000
00000010
Przebieg typu 4-Run
{0001}{0}{001}
{0}{0000001}
Bity
oznaczające
typ przebiegu
(4 bity)
Pozycja
różniącego
Wartość
się bitu
bitów
wypełnienia dopełnienia
(3 bity)
(1 bit)
Bit końca
licznika (1 bit)
Licznik bajtów
wypełnienia (7 bitów)
Rys. 8. Przykład przebiegu 4-Run
59
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
w
Schemat kompresji BBC osiąga niemal tak dobry współczynnik kompresji jak kompresja
GZIP. Struktura przebiegów jest stosunkowo prosta i pozwala algorytmowi dekompresji
ustalić typ przebiegu w wyniku przeprowadzenia do 5-6 operacji bitowych. Prostota struktury przebiegów pozwala również na przeprowadzanie operacji bitowych na skompresowanych mapach bitowych. Taka strategia zapewnia krótkie czasy wykonywania zapytań z wykorzystaniem skompresowanych map bitowych przy satysfakcjonującym współczynniku
kompresji. Z powyższego powodu nadaje się on do zastosowań w hurtowniach danych
z przetwarzaniem w trybie OLAP i jest już wykorzystywany w produktach komercyjnych
(Np. Oracle).
3.4 Kompresja WAH
w
da
.b
w
Technika kompresji WAH (ang. Word-Aligned Hybrid) [2] podobnie, jak BBC została
oparta o kodowanie run-length. Ciągi bitów w mapach bitowych również są dzielone na
mniejsze fragmenty. W przypadku WAH są to 31-bitowe słowa. Podział na 31-bitowe słowa ma na celu dostosowanie długości fragmentów do procesorów 32-bitowych. Słowa te
spełniają podobną rolę, co przebiegi w schemacie kompresji BBC, jednakże mają o wiele
prostszą budowę niż przebiegi w BBC.
Pierwszy bit przebiegu przechowuje typ danego przebiegu. Stąd prosty wniosek, że
w kompresji WAH wyróżniamy tylko dwa następujące typy przebiegów: wypełnienie i dopełnienie.
− Wypełnienie (ang. fill) informuje o liczbie następujących po sobie 31-słów wypełnionych samymi bitami o wartości 0 lub samymi bitami o wartości 1. Pierwszy bit 32bitowego wypełnienia ma wartość 1 i informuje nas o tym, że mamy do czynienia z
wypełnieniem. Następny bit informuje nas o tym, jaką wartością wypełnione są 31bitowe słowa. Pozostałe 30 bitów jest używanych do zapisu liczby 31-słów wypełnionych bitami o tej samej wartości. Jedno wypełnienie pozwala, więc zapisać informację o wystąpieniu do 1073741823 31-bitowych słów. Ideę wypełnienia ilustruje
następujący przykład:
Cztery 31-bitowe słowa wypełnione samymi zerami:
000....31bit...0000 000....31bit...0000 000....31bit...0000 000....31bit...0000
Bit typu
przebiegu
pl
s.
{1}{0}{000000
32-bitowe Wypełnienie:
00000000
00000000
Bit równy wartości bitów
31-bitowych słów
Rys. 9. Przykład wypełnienia w kompresji WAH
00000100}
Liczba 31-bitowych
słów
− Dopełnienie (ang. tail) podobnie jak w schemacie kompresji BBC stanowi ciąg bitów
o następujących po sobie różnych wartościach bitów. Pierwszy bit 32-bitowego dopełnienia ma wartość 0. Następujące po nim 31-bitów stanowi 31-bitowe słowo, którego nie można było poddać kompresji. Ideę dopełnienia ilustruje następujący przykład:
60
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
Cztery 31-bitowe słowa wypełnione naprzemiennie zerami i jedynkami:
010....31bit...1010 010....31bit...1010 010....31bit...1010 010....31bit...1010
Cztery 32-bitowe wypełnienia:
0010....31bit...1010 0010....31bit...1010
{0}010....31bit...1010
0010....31bit...1010
w
Bit typu przebiegu
Rys. 10. Przykład dopełnień w kompresji WAH
40000380
C0000002
40000380
Postać skompresowana map bitowych A,B i C:
80000002
001FFFFF
7C0001E0
3FE00000
80000003
0000000F
00000003
00000003
pl
s.
A
B
C
da
.b
w
w
Kompresja WAH posiada dwie postacie użytkowe: skompresowaną i zdekompresowaną.
W postaci skompresowanej występują zarówno wypełnienia jak i dopełnienia. W tej postaci
mapy bitowe są przechowywane na dysku. W postaci zdekompresowanej występują tylko
dopełnienia. Każde wypełnienie zostaje zdekompresowane do dopełnień o liczności równej
liczbie 31-bitowych słów o jednakowych bitach zapisanych w wypełnieniu. Postaci zdekompresowanej używa się do reprezentacji mapy bitowej w pamięci. Taka reprezentacja
jest o 1/32 większa od reprezentacji nieskompresowanej mapy bitowej. Wzrost rozmiaru nie
wpływa na efektywność przetwarzania. Schemat kompresji WAH posiada na tyle prostą
strukturę w obu reprezentacjach, że umożliwia przeprowadzanie operacji logicznych zarówno na skompresowanej jak i zdekompresowanej postaci WAH.
Poniższy przykład ilustruje obie postacie oraz w jaki sposób przeprowadzane są operacje
bitowe na skompresowanych mapach bitowych:
Postać zdekompresowana map bitowych A,B i C:
A
40000380
00000000
00000000
001FFFFF
0000000F
B
7FFFFFFF
7FFFFFFF
7C0001E0
3FE00000
00000003
C
40000380
00000000
00000000
00000000
00000003
Rys. 11. Operacja AND (A AND B = C) przeprowadzana na mapach bitowych
skompresowanych WAH w postaci zdekompresowanej i skompresowanej [6]
Przeprowadzanie operacji logicznych na zdekompresowanej formie map bitowych jest równie proste jak na mapach bitowych nie skompresowanych. Jedynie musimy zagwarantować,
że wartość pierwszego bitu informująca nas o typie przebiegu pozostanie równa jeden. By
przeprowadzić operacje logiczne na mapach bitowych skompresowanych musimy przeprowadzić dodatkowe operacje bitowe. Musimy zidentyfikować typy przebiegów oraz typy
słów, jakie uzyskamy w wyniku przeprowadzanej operacji. Forma zdekompresowana jest
używana, gdy operacje logiczne są przeprowadzane na wielu mapach bitowych jednocześnie jak w przypadku zapytań o warunkach zakresowych. Forma skompresowana jest wykorzystywana w przypadku pojedynczych operacji logicznych jak w przypadku zapytań z warunkami równościowymi.
61
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
3.5 Kompresja RLH
w
Schemat kompresji Run-Length Huffman (RLH) [9, 10] łączy w sobie dwie techniki:
kodowanie run-length oraz kodowanie Huffmana.
− Wariant kodowania run-length. W standardowym schemacie kodowania run-length,
kodowaniu podlegają długości ciągów tych samych symboli, np. dla ciągu
000011110100 otrzymujemy kod 44112. W przypadku kodowania zaproponowanego
w niniejszym rozdziale, kodowaniu podlegają odległości do kolejnego bitu o wartości jeden. Przykładowo dla ciągu 000011110100 otrzymujemy kod 400012, przy założeniu, że koniec ciągu interpretujemy tak jak bit o wartości jeden. Zatem, dla powyższego ciągu pierwszy bit o wartości 1 jest odległy o 4 bity, następny bit o wartości jeden jest odległy o 0 bitów, itd. Takie rozwiązanie zostało przyjęte ze względu na malejące gęstości bitów o wartości jeden w mapach bitowych wraz ze wzrostem liczności dziedziny atrybutu indeksowanego. W efekcie, dla pojedynczej mapy bitowej
powstaje znacznie mniej symboli (odległości do bitów o wartości jeden) niż przy
standardowej formie kodowania run-length. W taki sposób kodujemy wszystkie mapy bitowe.
− Algorytm kodowania Huffmana jest wykorzystywany w drugim kroku schematu
kompresji. Dane wejściowe dla algorytmu Huffmana stanowią zebrane statystyki
częstości występowania symboli we wszystkich mapach bitowych zakodowanych
z użyciem zmodyfikowanego kodowania run-length w pierwszym kroku. Na podstawie tych statystyk zostaje utworzone drzewo kodów Huffmana. Kody Huffmana służą do zakodowania wszystkich map bitowych. Tak zakodowane mapy bitowe są następnie zapisywane na dysku. Drzewo kodów Huffmana jest również zapisywane na
dysku, jednakże w oddzielnej strukturze. Rozmiar takiego drzewa jest stosunkowo
niewielki. Dla danych testowych: tabeli o 2 milionach rekordów i liczności dziedziny
atrybutu indeksowanego równej 1000, rozmiar drzewa zapisanego na dysku sięgał 65
KB.
Poniżej przedstawiono prosty przykład zastosowania proponowanego schematu kompresji
na tabeli liczącej 19 rekordów, posiadającej atrybuty ID oraz Płeć. Indeks bitmapowy
został założony na atrybucie Płeć.
da
.b
w
w
pl
s.
Tabela 3. Przykładowa tabela Klienci i indeks bitmapowy na atrybucie płeć
62
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
Kolejne kroki algorytmu będą przebiegały następująco:
− Krok 1: Dokonujemy kodowania map bitowych za pomocą kodowania run-length.
Kolejne symbole oznaczają odległości do kolejnych jedynek w mapach bitowych.
Kodowanie run-length na mapach bitowych
Kobieta
Mężczyzna
w
w
1
0
0
3
0
0
3
0
0
2
3
0
0
0
0
3
1
3
0
w
0
Rys. 12. Przykład użycia kompresji RLH: Krok 1
da
.b
− Krok 2: Zliczamy statystyki częstości występowania poszczególnych symboli. Będą
one stanowić dane wejściowe dla algorytmu Huffmana.
Uzyskane statystyki częstości występowania
Symbol
Częstość
0
12
3
5
1
2
2
1
Rys. 13. Przykład użycia kompresji RLH: Krok 2
O
pl
s.
− Krok 3: Budujemy drzewo kodów Huffmana i uzyskujemy kody dla poszczególnych
symboli.
Drzewo kodów Huffmana
X3
0
1
X2
O
3
O
1
X1
1
1
Uzyskane kody Huffmana
Symbol
2
Kod symbolu
0
0
3
10
1
110
2
111
Rys. 14. Przykład użycia kompresji RLH: Krok 3
63
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
− W efekcie, algorytm daje nam następujące skompresowane mapy bitowe. Poszczególne komórki (por. rys.5.5) obrazują zawartość kolejnych bajtów. Ciągi bitów zakodowanych map bitowych składają się z kodów Huffmana odpowiadających symbolom zawartym w mapach bitowych zakodowanym przy użyciu kodowania runlength.:
Skompresowana mapa bitowa dla atrybutu o wartości Kobieta:
{110} {0} {0} {10} {0}
{10}{0}{0} {110} {0}
{0}
w
1
0
0
3
0
3
0 0
1
0
0
w
Skompresowana mapa bitowa dla atrybutu o wartości Mężczyzna
{0} {10} {0} {0} {111}
{0} {0} {10} {10}
3
0
0
2
w
0
0 0
3
3
Rys. 15. Mapy bitowe z rys. 7.1 w postaci skompresowanej
da
.b
Rozmiar drzewa kodów Huffmana okazuje się sprawą kluczową dla przebiegu
algorytmu dekompresji i użytkowania tak skompresowanych map bitowych. Rozmiar ten
jest na tyle niewielki, iż można założyć, że drzewa kodów Huffmana mogą być
przechowywane na stałe w pamięci w czasie użytkowania hurtowni danych. Na przykład
dla tabeli o 2 000 000 rekordów i liczności dziedziny atrybutu indeksowanego równej 1000
użytej w przeprowadzonych testach, rozmiar drzewa kodów Huffmana zapisanego na dysku
wynosił 65 KB. Dzięki przechowywaniu drzewa kodów Huffmana w pamięci RAM
zmniejszamy koszt wykonania operacji dekompresji.
W celu dokonania dekompresji mapy bitowej musimy jedynie dokonać odczytu kolejnych bitów skompresowanej mapy bitowej i przetransformować je z wykorzystaniem drzewa kodów Huffmana do symboli, które te kody reprezentują. Takie postępowanie nadal
wymaga wykonania większej liczby operacji niż liczba operacji, jaką należy wykonać
w czasie dekompresji map bitowych skompresowanych z użyciem schematów kompresji
WAH czy BBC. Dla każdej odczytanej wartości int z pliku musimy dokonać 32 porównań
w celu ustalenia wartości bitów na kolejnych pozycjach. Natomiast schemat kompresji
WAH wymaga dla każdej odczytanej wartości int z pliku jednego porównania w celu
stwierdzenia typu występującego przebiegu. Dodatkowo, w czasie wykonywania operacji
bitowych, mapy bitowe skompresowane z użyciem WAH przechowuje się w tak zwanej
postaci zdekompresowanej.
Proces aktualizacji map bitowych w momencie aktualizacji danych stanowi dość poważny problem. Pielęgnacja tak skompresowanych indeksów bitmapowych jest trudna do przeprowadzenia. W celu aktualizacji indeksu, należy zdekompresować mapy bitowe. Następnie należy zmodyfikować wartości bitów rekordów, które uległy zmianie. W końcowym
etapie należy jeszcze raz przeprowadzić kompresję map bitowych. Jest to konieczne ze
względu na zmiany w statystykach częstości występowania symboli kodowania run-length
w mapach bitowych. Używając starego drzewa kodów Huffmana, uzyskiwalibyśmy mapy
bitowe skompresowane w sposób nieoptymalny. Dodatkowo, mogłoby się zdarzyć, że
w wyniku aktualizacji w statystykach pojawiłby się nowy symbol nie ujęty w drzewie kodów Huffmana. Zasadniczo, w hurtowniach danych, założone indeksy są kasowane przed
procesem aktualizacji danych i budowane od nowa po zakończeniu tego procesu. Z tych
pl
s.
64
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
powodów przedstawione powyżej ograniczenia w kompresji RLH nie są tak ważne. Indeks
bitmapowy zostanie stworzony i skompresowany od podstaw przy każdym odświeżeniu danych. Jednakże, w celu zniwelowania i tej wady dla innych zastosowań kompresji RLH niż
hurtownie danych zaproponowany został schemat kompresji RLH-1024 [10].
3.6 Kompresja RLH-1024
w
da
.b
w
w
W kompresji RLH-1024 przed dokonaniem kompresji RLH, mapy bitowe są dzielone na
1024-bitowe fragmenty, co stanowi pierwszą różnicę. Następnie dla każdego fragmentu liczone są częstości odległości kolejnych bitów o wartości jeden, podobnie jak w RLH.
Wszystkie częstości wszystkich fragmentów są używane do konstrukcji jednego drzewa kodów Huffmana. Kody uzyskane tylko z tego samego, jednego drzewa są wykorzystywane
przy kompresji wszystkich fragmentów. Przy czym, końcowa lista kodów będzie zawierać
kody dla wszystkich 1024 możliwych odległości. Odległości, które nie wystąpiły w kompresowanej mapie bitowej mają przyporządkowaną częstość równą 1.
Kompresja RLH-1024 ma następujące zalety w porównaniu z pierwszym wariantem
RLH. Po pierwsze, zawiera wszystkie możliwe odległości bitów o wartości jeden w drzewie Huffmana eliminując konieczność przebudowy drzewa w przypadku, gdy aktualizacja
mapy bitowej wygeneruje niewystępującą wcześniej odległość. Po drugie, 1024-bitowe
fragmenty mogą być czytane i przetwarzane równolegle. Po trzecie, w celu dokonania aktualizacji map bitowych, jedynie odpowiedni 1024-bitowy fragment musi zostać odczytany
i zdekompresowany.
4 Porównanie technik kompresji
4.1 GZIP
pl
s.
Technika kompresji GZIP posiada lepszy współczynnik kompresji niż BBC czy WAH,
jednocześnie jest najwolniejszym schematem kompresji pod względem mierzonych czasów
odpowiedzi na zapytania z użyciem skompresowanych map bitowych. Nie jest to
niespodzianką, zważywszy, że GZIP jako schemat kompresji ogólnego przeznaczenia nie
był opracowany w celu zastosowań w hurtowniach danych. GZIP nie wspiera operacji
bitowych na skompresowanych mapach bitowych. Algorytm kompresji i dekompresji GZIP
jest znacznie bardziej złożony niż ten używanych w BBC, czy WAH. Te wady mogą zostać
rozszerzone na wszystkie schematy kompresji ogólnego przeznaczenia. Podsumowując,
schematy kompresji ogólnego przeznaczenia nie mogą w żaden sposób konkurować ze
specjalizowanymi schematami kompresji na polu kompresji map bitowych w hurtowniach
danych.
4.2 BBC I WAH
Zarówno BBC jak i WAH bazują na tej samej strategii. Oba schematy kompresji korzystają
z prostego algorytmu kompresji, który kosztem osiąganego współczynnika kompresji gwarantuje niskie czasy przetwarzania skompresowanych map bitowych. Takie podejście jest
sensowne dla indeksowanych atrybutów o wysokiej liczności (>30). W tym przypadku, mapy bitowe są w większości wypełnione bitami o wartości 0. Dzieląc je na 8-bitowe (dla
65
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
w
BBC) i na 31-bitowe (dla WAH) słowa, uzyskujemy w większości słowa wypełnione samymi bitami o wartości 0. Są one kompresowane do przebiegów typu wypełnienie (ang.
fill). Wynika to z faktu, że średnie odległości bitów o wartości jeden w takich mapach bitowych są znacznie większe niż wielkości słów używane przez te kompresje. Dla liczności
atrybutu indeksowanego mniejszej niż 30, obie techniki kompresji uzyskują gorsze współczynniki kompresji, jeśli wartości atrybutu indeksowanego w danych są ułożone losowo.
W takim przypadku, średnia długość jednorodnego ciągu bitów jest mniejsza niż długość
używanych słów w kompresjach i niewiele słów jest zapisywanych jako przebiegi typu wypełnienie. Zarówno wielkości map bitowych jak i czasy wykonania zapytań na tych mapach
bitowych będą w takim przypadku niemal identyczne z czasami wykonania zapytań na nie
skompresowanych mapach bitowych.
Techniki kompresji BBC i WAH zostały poddane eksperymentom obliczeniowym w celu porównania z techniką kompresji GZIP [6]. Eksperyment wykorzystywał 2,2 miliona rekordów danych uzyskanych z eksperymentu fizyki wysokich energii STAR. Testy były
przeprowadzane na maszynie Sun Enterprise 450 wyposażonej w procesory 400 MHz
UltraSPARC II, 4 GB RAM, które wystarczały na przechowywanie całych przypadków
testowych w pamięci. Eksperyment mierzył dwie wartości: czas przetwarzania map bitowych oraz wielkości skompresowanych map bitowych.
Wykres po lewej ukazuje czasy przeprowadzania operacji bitowej OR na mapach bitowych. Wiele takich operacji ma miejsce na zapytaniach zakresowych opartych o atrybut
indeksowany. Pokazane czasy nie zawierają w sobie czasów poświęcanych na operacje I/O
i stanowią jedynie czasy przetwarzania map bitowych w pamięci. Wykres po prawej stronie
ukazuje średnie wielkości skompresowanych map bitowych. Oba wykresy są opisane
w dziedzinie gęstości map bitowych. Gęstość mapy bitowej oznacza stosunek liczby bitów
o wartości jeden w mapie bitowej do liczby wszystkich bitów w mapie bitowej. Proste
oznaczone jako "LIT" na obu wykresach ukazują wartości oczekiwane dla nie skompresowanych map bitowych.
da
.b
w
w
pl
s.
Rys. 16. Porównanie czasów przetwarzania operacji OR oraz rozmiarów skompresowanych
map bitowych [6]
Z rys. 16 wynika, że o ile technika kompresji BBC został zoptymalizowany dla czasów
wykonywania zapytań, tak WAH powziął tą optymalizację do ekstremalnego punktu. Technika kompresji WAH umożliwia do dwunastu razy szybsze przetwarzanie operacji
bitowych na skompresowanych mapach bitowych niż BBC, jednocześnie kompresując
mapy bitowe do wielkości 60 % większych niż te skompresowane przez BBC. W
porównaniu do map bitowych nie skompresowanych, WAH niemal zawsze daje lepszy czas
66
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
odpowiedzi na zapytanie pod względem czasu przetwarzania. Dodatkowo mapy bitowe
WAH są łatwiejsze w przetwarzaniu niż mapy bitowe BBC. W celu rozpoznania przebiegu
WAH musimy dokonać tylko jednej operacji bitowej, tymczasem dla mapy bitowej
skompresowanej BBC potrzeba wykonać przynajmniej trzech operacji bitowych by
rozpoznać typ przebiegu BBC. Technika kompresji BBC jest lepiej przystosowana do
kodowania krótszych wypełnień. Jednakże BBC tworzy w ten sposób więcej przebiegów
niż WAH, co prowadzi to ogólnej utraty efektywności przetwarzania map bitowych.
w
4.3 WAH, RLH I RLH-1024
da
.b
w
w
W artykułach [9], [10] przedstawiono wyniki eksperymentów obliczeniowych z udziałem
kompresji WAH, RLH oraz RLH1024. Eksperymenty były przeprowadzane na komputerze
klasy PC wyposażonym w procesor Athlon(TM) XP 2500+, dysk twardy Seagate 80 GB
oraz pamięć 768 MB RAM. Wszystkie kompresje zostały zaimplementowane w środowisku Javy i były uruchamiane pod kontrolą Windows. Dane oraz indeksy bitmapowe (skompresowane i nieskompresowane) były przechowywane na dysku pod kontrolą systemu operacyjnego. Testy zostały przeprowadzone dla tabeli liczącej 2 miliony rekordów. Indeks bitmapowy został zdefiniowany na atrybucie typu integer mającym sparametryzowaną liczność dziedziny w zakresie od 2 do 1000 unikalnych wartości. Rozkład tych wartości na rekordy tabeli był losowy.
Celem testów było porównanie kompresji WAH do kompresji RLH i RLH-1024 na tle
indeksu bitmapowego nieskompresowanego względem dwóch miar: (1) czasu odpowiedzi
na zapytanie z warunkiem nałożonym na indeksowany atrybut, (2) wielkością skompresowanych map bitowych. Zapytanie wykorzystywane w testach miało poniższą postać:
select ... from ... where A in (v1, v2, ..., v100)
gdzie A oznacza atrybut ze zdefiniowanym indeksem bitmapowym, v1,v2, ..., v100 reprezentują 100 losowo wybranych wartości atrybutu indeksowanego. Wyniki eksperymentu
przedstawiono na rys. 17. Czas na wykresie jest średnim czasem przetwarzania pojedynczej
mapy bitowej.
pl
s.
Rys. 17. Czasy odpowiedzi na zapytanie oraz rozmiary indeksów dla kompresji WAH,
RLH i RLH-1024 i przy braku kompresji [10]
Z wykresów czasu odpowiedzi wynika, że RLH i RLH1024 oferują gorsze czasy odpowiedzi niż WAH i nieskompresowany indeks bitampowy dla wielkości dziedziny atrybutu
67
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
J. Chmiel, M. Stabno, R. Wrembel
w
indeksowanego mniejszej niż 5. Dzieje się tak dlatego, że w przypadku małych dziedzin
atrybutu indeksowanego mapy bitowe osiągają wysoką gęstość bitów o wartości jeden.
W konsekwencji średnie odległości występujące pomiędzy jedynkami okazują się niewielkie. Optymalne kodowanie Huffmana daje w efekcie nikły zysk na rozmiarze indeksu, a co
za tym idzie nikły zysk na czasie poświęcanym na odczyt mapy bitowej z dysku. Jednocześnie operacje logiczne dokonywane w pamięci okazują się bardziej złożone w przypadku RLH, niż odpowiednie operacje przeprowadzane na mapach bitowych skompresowanych z użyciem WAH, czy na nieskompresowanych mapach bitowych. Dla liczności dziedziny atrybutu indeksowanego większej niż 5 sytuacja ulega odwróceniu. Wraz ze wzrostem liczności dziedziny spada gęstość bitów o wartości jeden w mapach bitowych. Algorytm Huffmana wykorzystany w RLH i RLH-1024 korzysta na tym zjawisku znacznie
lepiej niż odpowiadające mu mechanizmy w kompresji WAH.
Obserwując rozmiary indeksów, można zauważyć, że przyrost wielkości map bitowych
dla kompresji RLH i RLH-1024 jest łagodniejszy niż dla kompresji WAH. Ponadto, różnica
w wielkościach indeksów RLH i RLH-1024 nie jest znacząca i maleje wraz ze wzrostem
liczności dziedziny atrybutu indeksowanego. Na gorszy wynik RLH-1024 ma wpływ podział map bitowych na 1024-bitowe słowa oraz wykorzystywanie nieoptymalnego drzewa
w kodowaniu Huffmana.
w
w
da
.b
5 Podsumowanie
Literatura
1.
2.
3.
pl
s.
W rozdziale przedstawiono szereg technik kompresji map bitowych w zastosowaniach
w hurtowniach danych. Techniki kompresji ogólnego przeznaczenia takie jak GZIP okazują
się zbyt wymagające czasowo do wykonywania operacji dekompresji w czasie wykonywania zapytań. Aktualnie najlepszym rozwiązaniem znajdującym zastosowanie w praktyce
okazują się być techniki kompresji BBC i WAH zaprojektowane w taki sposób, aby minimalizować czas odpowiedzi na zapytania kosztem uzyskiwanego współczynnika kompresji.
Od współczynnika kompresji oczekuje się jedynie by zapewniał rozmiary skompresowanego indeksu nie większe niż odpowiadające rozmiary indeksu B-drzewo. Inne rozwiązanie
prezentuje kompresja RLH i jej wariant RLH-1024, które minimalizują czas odpowiedzi na
zapytania za pomocą struktur pomocniczych przechowywanych w pamięci i wykorzystywanych przez hurtownie danych przy operacjach kompresji i dekompresji map bitowych.
Dzięki takiemu podejściu możemy zastosować bardziej skomplikowany algorytm kompresji. Przeprowadzone eksperymenty pokazują, że kompresje RLH i RLH-1024 dla atrybutów
o dziedzinach z zakresu kilka do 1000 różnych wartości posiadają lepsze charakterystyki
niż BBC i WAH. Kompresje RLH i RLH-1024 mogą znaleźć zastosowanie poza hurtowniami danych pod warunkiem, że będą gwarantować podobny czas aktualizacji skompresowanych map bitowych, co kompresje BBC i WAH.
Antoshenkov G.: Byte-aligned bitmap compression. Technical report, Oracle Corp, U.S. Patent
number 5,363,098, 1994.
Chan C. Y., Ioannidis Y. E.: An Efficient Bitmap Encoding Scheme for Selection Queries.
Materiały konferencji: ACM SIGMOD Int. Conference on Management of Data, 1999.
3,ZLIB Compressed Data Format Specification version 3.3, http://www.faqs.org/rfcs/3.html
68
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
Przegląd technik kompresji map bitowych dla zastosowań w hurtowniach danych
4.
5.
6.
7.
w
8.
RFC 1951, DEFLATE Compressed Data Format Specification version 1.3,
http://www.faqs.org/rfcs/4.html
RFC 1952, GZIP file format specification version 4.3, http://www.faqs.org/rfcs/5.html
Wu K., Otoo E. J., Shoshani A.: Compressing Bitmap Indexes for Faster Search Operations.
Materiały konferencji: Int. Conference on Scientific and Statistical Database Management
(SSDBM).
O'Neil, P., Quass, D.: Improved Query Performance with Variant Indexes. Materiały
konferencji: ACM SIGMOD Int. Conference on Management of Data, 1997.
Jurgens M., Lenz H.J.: Tree Based Indexes vs. Bitmap Indexes: A Performance Study.
International Journal of Cooperative Information Systems. 10(3), 2001.
Stabno M., Wrembel R.: RLH: Bitmap Compression Technique Based on Run-length and
11fman Encoding. Materiały konferencji: ACM Int. Workshop on Data Warehousing and OLAP
(DOLAP), 2007.
Stabno M., Wrembel R.: Run-Length 11fman - alternatywny algorytm kompresji map bitowych.
Materiały konferencyjne II Krajowa Konferencja Naukowa Technologie Przetwarzania Danych,
2007.
1fman Compression. Odczytane 08.05.2007 ze strony
http://www.geocities.com/SiliconValley/2151/11fman.html
Stockinger, K., Wu, K., Shoshani, A.: Strategies for Processing ad hoc Queries on Large Data
Sets. International Workshop on Data Warehousing and OLAP (DOLAP), USA, 2002.
Wu K., Otoo E.J., Shoshani A.: On the Performance of Bitmap Indices for High Cardinality
Attributes. International Conference on Very Large Data Bases (VLDB), Canada, 2004.
Wu K., Otoo E., Shoshani A.: An Efficient Compression Scheme for Bitmap Indices. Technical
Report LBNL-49626, 2006.
9.
11.
12.
13.
14.
da
.b
w
w
10.
pl
s.
69
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008
w
da
.b
w
w
pl
s.
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008

Podobne dokumenty