Efektywność przetwarzania OLAP Hurtownie danych - przegląd technologii Robert Wrembel Politechnika Poznańska Instytut Informatyki Robert.Wrembel@cs.put.poznan.pl www.cs.put.poznan.pl/rwrembel. Indeksowanie B-drzewo Indeks bitmapowy Indeks połączeniowy Bitmapowy indeks połączeniowy 2. Perspektywa zmaterializowana koncepcja przepisywanie zapytań odświeżanie wybór perspektyw do materializacji 3. Optymalizacja GROUP BY 4. Partycjonowanie 5. Kompresja 6. Przetwarzanie równoległe 2 B-drzewo (B-tree) Indeks połączeniowy (join index) 4 x<=4 x>4 Zmaterializowany wynik połączenia np. indeks na atrybucie Sklepy.sklep_id 2 6 8 x<=2 2<x<=4 4<x<=6 6<x<=8 8<x 2 3 4 5 6 7 8 9 Sklepy sklep_id nazwa Sprzedaż sklep_id produkt_id l_sztuk 3 4 Wprowadzenie (2) Indeks bitmapowy - definicje Zapytania analityczne często nie są selektywne wybierają kilkadziesiąt % rekordów tabeli Indeksy B-drzewo są efektywne dla selektywności max 2% Zastosowanie innego rodzaju indeksu do indeksowania danych w HD indeks bitmapowy Krotność atrybutu - szerokość dziedziny atrybutu Mapa bitowa - wektor bitów bit odpowiada rekordowi tabeli Indeks bitmapowy zbiór map - jedna mapa opisuje jedną wartość z dziedziny Dostęp do map 2-wymiarowa tablica indeks B-drzewo 5 6
7 Indeks bitmapowy - wykorzystanie select count(*) from sprzedaż where marka in ('Audi', 'Ford') and typ = 'sport' and plec='k'; Indeks bitmapowy - charakterystyka () Mały rozmiardla atrybutów o małej krotności l_rekordów = krotność A = 4 adres_rekordu = B (Oracle) indeks bitmapowy na atrybucie A 4 mapy bitowe: 4 x ( / 8) = 4 x 25kB = 5kB indeks B + -drzewo na atrybucie A x B = MB 8 Indeks bitmapowy - charakterystyka (2) Indeks bitmapowy - charakterystyka (3) Szybkość przetwarzania mały indeks mała liczba operacji we/wy przetwarzanie w RAM przetwarzanie 64 bitów w jednym cyklu zegara szybkie operacje AND, OR, NOT, COUNT na mapach nie nadaje się do obsługi operatora LIKE Duży rozmiardla atrybutów o dużej krotności l_rekordów = krotność A = 24 adres_rekordu = B indeks bitmapowy na atrybucie A 24 mapy bitowe: 24 x ( / 8) = 24 x 25kB = 28MB indeks B + -drzewo na atrybucie A x B = MB 9 Indeks bitmapowy charakterystyka (5) Eksperyment () Koszty uaktualniania indeksów w trakcie pracy systemu wstawianie rekordów zwiększanie długości map usuwanie rekordów zmniejszanie długości map modyfikowanie rekordów operacje na 2 mapach współbieżność blokowane są ciągłe obszary map Oracleg R2 bufor danych: 73MB; SGA: 57MB liczba rekordów w indeksowanej tabeli: 3,2 mln 2
3 Eksperyment (2) Eksperyment (3) select count() from T where liczba rekordów w indeksowanej tabeli: 3,2 mln krotność indeksowanego atrybutu: 24 select sum(val) from T where liczba rekordów w indeksowanej tabeli: 3,2 mln krotność indeksowanego atrybutu: 24 4 Eksperyment (4) Techniki zmniejszania rozmiaru IB Tworzenie indeksów Podział dziedziny indeksowanego atrybutu na zakresy Kodowanie map Kompresja map 5 6 Podział na zakresy () Podział na zakresy (2) Dziedzina indeksowanego atrybutu jest dzielona na zadane zakresy np. temperatura <, 2), <2, 4), <4, 6), <6, 8), <8, ) indeksowany atrybut indeks bitmapowy z podziałem na zakresy Możliwe budowanie map dla wybranych zbiorów wartości np. {żółty, pomarańczowy, czerwony}, {błękitny, niebieski, granatowy} Cechy uniezależnienie liczby map od szerokości dziedziny w zbiorze wskazanym przez mapę bitową znajdują się również rekordy nie spełniające warunku selekcji konieczność odfiltrowania zapytanie: policz rekordy dla których <=temp<45 7 8
9 Kodowanie map () Kodowanie map (2) Zastąpienie wartości indeksowanego atrybutu inną wartością, której reprezentacja za pomocą map zajmie mniej miejsca krotność indeksowanego atrybutu: 5 podstawowy indeks bitmapowy: 5 map zakodowanie 5 różnych wartości na log 2 5 =6 bitów konieczność odwzorowania wartości oryginalnych w zakodowane tabela odwzorowania zapytanie: select * from T where taryfa = 'Kubali' maska IB: B2 B B atrybut zakodowany IB tabela odwzorowania 2 Kompresja map Kompresja WAH i BBC Kodowanie run-length zastąpienie jednorodnego ciągu bitów o wartości w ( lub ) i o długości m ciągiem: [w m] 7 3 kompresja BBC (Oracle) kompresja WAH kompresja RLH podział mapy bitowej na słowa o długości n bitów BBC słowa 8 bitowe WAH słowa 3 bitowe RLH słowa 24 bitowe lub brak podziału WAH - Word Aligned Hybrid BBC - Byte-aligned Bitmap Compression Wypełnienie słowo złożone z samych zer lub z samych jedynek podlega kompresji Dopełnienie słowo złożone z zer i jedynek nie podlega kompresji Format skompresowanego słowa bit pierwszy wartość oznacza wypełnienie wartość oznacza dopełnienie 2 22 Kompresja WAH i BBC Kompresja WAH () bit drugi jeśli bit pierwszy przyjmuje wartość oznacza wartość wypełnienia ( lub ) jeśli bit drugi przyjmuje wartość jest najstarszym bitem niekompresowalnej grupy kolejne bity służą do zapisania długości wypełnienia, tj. liczby jednorodnych zer lub jedynek Założenia 32 bitowy procesor mapa bitowa złożona z 5456 bitów Działanie kompresji WAH krok : podział mapy bitowej na grupy złożone z 3 bitów 23 24
25 Kompresja WAH (2) Kompresja WAH (3) Działanie kompresji WAH krok 2: scalenie grup z identycznymi bitami w jedną grupę scalane są grupy 2 do 75 Działanie kompresji WAH kodowanie 3 grup wynikowych grupa pierwsza dopełnienie przebiegu grupa 2-75 wypełnienie przebiegu 2 grupa 76 dopełnienie przebiegu 2 grupa niejednorodna grupa niejednorodna 26 Kompresja WAH i BBC - wady Kompresja RLH Podział mapy bitowej na słowa pogarsza jakość jej kompresji jednorodne ciągi bitów nie zawsze pasują do długości słowa i w takim przypadku nie mogą być kompresowane Ze wzrostem krotności indeksowanego atrybutu maleje liczba jednorodnych ciągów bitów (przy nieuporządkowaniu danych) RLH - Run-Length Huffman Bazuje na kodowaniu run-length (zmodyfikowane) kodowaniu Huffmana 27 28 Kodowanie Huffmana () Kodowanie Huffmana (2) Koncepcja: oryginalne symbole są zastępowane ciągami bitów, przy czym symbole występujące częściej są zastępowane krótszymi ciągami bitów zakodować ciąg znaków: to_jest_test Działanie kodowania Huffmana Krok : obliczenie częstości występowania symboli w kodowanym ciągu Działanie kodowania Huffmana Krok 2: zbudowanie drzewa kodów Huffmana 29 3
3 Kodowanie Huffmana (3) Kompresja RLH () Działanie kodowania Huffmana Krok 3: wyznaczenie kodów Huffmana i zastąpienie nimi oryginalnych symboli Zmodyfikowane kodowanie run-length kodowaniu podlegają odległości pomiędzy kolejnymi bitami o wartości jeden 4 2 oryginalny tekst: 2B skompresowany tekst: 4B 42 Wzrost krotności atrybutu zmniejszanie się gęstości map zmniejszanie się liczby symboli wykorzystywanych do kodowania map 32 Kompresja RLH (2) Kompresja RLH (3) Mapy bitowe, zakodowane z wykorzystaniem zmodyfikowanego kodowania run-length są kompresowane z wykorzystaniem kodowania Huffmana Częstości odległości we wszystkich mapach są reprezentowane w drzewie kodów Huffmana Rozmiar drzewa kodów Huffmana jest niewielki przechowywane w RAM, zwiększając efektywność kompresowania i dekompresowania map owe działanie Krok : kodowanie map obliczenie częstości symboli 33 34 Kompresja RLH (4) Kompresja RLH (5) owe działanie Krok 2: zbudowanie drzewa kodów Huffmana owe działanie Krok 3: kompresja oryginalna mapa bitowa płeć='kobieta' reprezentacja mapy po zmodyfikowanym kodowaniu run-length 3 3 skompresowana mapa bitowa RLH 35 36
37 WAH i RLH: rozmiary Liczba rekordów indeksowanej tabeli: 2 mln Zapytanie: WAH i RLH: czasy odpowiedzi select from where indeksowany_atrybut in (w, w2,, w) 38 komercyjnych () Oracle definiowane jawnie przez administratora kompresowane automatycznie (BBC) bitmapowy indeks połączeniowy wykorzystywany do optymalizacji zapytań gwiaździstych komercyjnych (2) Oracle - bitmapowy indeks połączeniowy create bitmap index sprz_jbi on sprzedaz(produkty.kategoria) from sprzedaz, produkty where sprzedaz.produkt_id= produkty.produkt_id; 39 4 komercyjnych (3) komercyjnych (4) Oracle - optymalizacja zapytań gwiaździstych z wykorzystaniem bitmapowego indeksu połączeniowego select sum(wartosc), pr.nazwa, sk.nazwa from sprzedaz sp, sklepy sk, produkty pr where sk.wojewodztwo in ('Mazowieckie', 'Wielkopolskie') and pr.kategoria='kosmetyki' and sp.sklep_id=sk.sklep_id and sp.produkt_id=pr.produkt_id group by pr.nazwa, sk.nazwa; Zdefiniowano bitmapowe indeksy połączeniowe na atrybutach Sklepy.wojewodztwo Produkty.kategoria Indeks na Produkty.kategoria będzie zawierał tyle map ile jest różnych kategorii produktów (w tabeli Produkty) pojedyncza mapa tego indeksu, np. dla grupy kosmetyki będzie wskazywała na te rekordy w tabeli sprzedaż, które opisują sprzedaż kosmetyków Indeks na Sklepy.wojewodztwo będzie zawierał tyle map ile jest różnych województw w tabeli sklepy pojedyncza mapa tego indeksu, np. dla Wielkopolski będzie opisywała te sprzedaże, które zrealizowano w Wielkopolsce 4 42
43 komercyjnych (5) Nastąpi przepisanie oryginalnego zapytania do zapytania z wykorzystaniem połączeniowych indeksów bitmapowych Krok odczytanie mapy opisującej sprzedaż produktów kategorii kosmetyki (MB kosmetyki ) odczytanie mapy opisującej sprzedaż w województwie wielkopolskim (MB Wielkopolska ) odczytanie mapy opisującej sprzedaż w województwie mazowieckim (MB Mazowsze ) Krok2 wyznaczenie wynikowej mapy (MB wynik ) MB wynik = MB kosmetyki and (MB Wielkopolska or MB Mazowsze ) Krok3 odczytanie rekordów z tabeli z wykorzystaniem mapy MB wynik komercyjnych (6) IBM DB2 tworzone i zarządzane niejawnie przez system wykorzystywane do optymalizacji zapytań gwiaździstych Każda z tabel wymiaru jest niezależnie łączona operatorem pół-połączenia z tabelą faktów Do łączenia są wykorzystane indeksy B-drzewo na kluczach obcych tabeli faktów Fizyczne adresy rekordów () będących wynikiem każdego pół-połączenia są reprezentowane przez oddzielną mapę bitową Mapy bitowe B i są konstruowane z wykorzystaniem funkcji haszowej na wartość funkcji haszowej odpowiada określonemu bitowi mapy Mapa wynikowa (opisująca rekordy będące wynikiem całego zapytania) jest iloczynem logicznym map B i 44 komercyjnych (7) komercyjnych (8) pr.kategoria='kosmetyki' SQL Server tworzone i zarządzane niejawnie przez system wykorzystywane do optymalizacji połączeń tabeli wymiaru z tabelą faktów algorytmem hash join tabela z kluczem podstawowym (tab. wymiaru) tabela zewnętrzna tabela z kluczem obcym (tab. faktów) tabela wewnętrzna sk.wojewodztwo in ('Mazowieckie', 'Wielkopolskie') AND 45 46 komercyjnych (9) komercyjnych () Wartości klucza podstawowego tabeli zewnętrznej są odzwierciedlane w mapę bitową za pomocą funkcji haszowej f.haszowa(pk) nr bitu Wartość klucza podstawowego po przetworzeniu funkcją haszową powoduje nadanie odpowiedniemu bitowi wartości tabela zewnętrzna PK 2 3 Haszuje się wartości klucza obcego tabeli wewnętrznej za pomocą tej samej funkcji haszowej jeżeli rekord R i z tabeli wewnętrznej haszuje się do bitu z wartością, wówczas R i łączy się z rekordem z tabeli zewnętrznej tabela zewnętrzna PK 2 3 tabela wewnętrzna FK 3 22 6 6 6 47 48
49 komercyjnych () Sybase IQ definiowane jawnie przez administratora Low Fast dla atrybutów o wąskiej dziedzinie max krotność wartości największa efektywność dla krotności do High Non Group dla atrybutów o szerokiej dziedzinie optymalizacja zapytań z warunkami zakresu i wyliczających agregaty komercyjnych (2) SAS Scalable Performance Data (SPD) Server indeks hybrydowy podział tabeli na segmenty (np. 892 rekordy), z których każdy jest indeksowany niezależnie indeksem bitmapowym lub indeksem B-drzewo rodzaj indeksu wybierany automatycznie przez system na podstawie gęstości wartości indeksowanego atrybutu dystrybucji wartości segment segment 2 segment 3. segment n 5 Podsumowanie Indeks bitmapowy efektywny dla atrybutów o wąskich dziedzinach mniej efektywny dla atrybutów o szerokich dziedzinach rozmiar indeksu podział dziedziny kodowanie map kompresja kodowanie run length algortymy BBC, WAH, RLH Oracle, IBM DB2, Sybase IQ, MS SQL Server, SAS SPD Server 5