A Tutorial Indexing structures in RDBMs George J Klir Vilem Vychodil (Palacky University, Olomouc) State University of New York (SUNY) Binghamton, New York 1390, USA gklir@binghamtonedu Palacky University, Olomouc, Czech Republic prepared for International Centre for Information and Uncertainty, Palacky University, Olomouc!!!! Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 1 / 31
Přehled seminářů 8 listopadu Vilém Vychodil Indexing structures in RDBMs 5 prosince Vilém Vychodil Query execution algorithms in RDBMs 1 prosince Ondřej Vaverka Survey of rank-aware approaches Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 / 31
Přehled 1 Organizace dat v relační databázi: pole, záznamy, soubory organizace dat do bloků, typy databázových souborů B-stromy a jejich modifikace: základní fakta vlastnosti vnitřních a listových uzlů, vkládání a mazání hodnot 3 Rozšiřitelné hashovací tabulky: základní principy, hashovací funkce, sloty, stránky, vkládání a mazání hodnot Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Fyzická implementace základních pojmů z RM vycházíme z pojmu (logická vrstva): relace nad relačním schématem relační schéma = konečná množina atributů a jejich typů (domén) n-tice = zobrazení přiřazující atributům hodnoty jejich typů relace = konečná množina n-tic nad daným schématem na fyzické vrstvě musí SŘBD (efektivně) řešit: jak kódovat jména atributů a jejich typy jak kódovat relační schémata jak kódovat n-tice nad relačními schématy jak reprezentovat relace Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 4 / 31
Pole, záznamy, soubory pole: sekvence bytů (s pevnou nebo pohyblivou velikostí) kóduje hodnoty atributů (tj hodnoty daných typů) záznam: sekvence polí kóduje n-tice relací záznamy jsou ukládány do diskových bloků (stránek paměti) třeba udržovat hlavičku záznamu (informace o pořadí, jménu a typu položek) soubor ( jiný význam než v op syst): množina bloků obsahující záznamy stejného typu kóduje relaci nad daným schématem uvažujeme nesetříděný / setříděný Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 5 / 31
Pole typy kódování atributů daných typů: 1 hodnoty s pevnou velikostí kódu: 8B signed integer (little endian), 8B IEEE 754 double (binary64), 1B ASCII character, dvojice hodnot typu double (kódující bod v rovině), pravdivostní hodnoty, řetězce s omezenou délkou, znaky UTF-8, UTF-16, výčtové typy, hodnoty s pohyblivou velikostí kódu: řetězce bez omezené délky (styl kódování C a/nebo PASCAL), další objekty (obrázky, videa), Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 6 / 31
Záznam struktura záznamu: zřetězení jednotlivých polí dodatečná informace (hlavička): (ukazatel na) schéma záznamu délka záznamu časové značky (timestamps) kvůli synchronizaci a souběžnému přístupu typická organizace polí: pole s pevnou délkou jsou řazena jako první následují pole s pohyblivou délkou (délka je zaznamenána v hlavičce) ukazatel na schéma a další informace délka záznamu ID BIRTHDATE NAME ADDRESS Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 7 / 31
Záznamy a přetečení bloku problém přetečení bloku záznam se nevejde do aktuálního bloku pokud je záznam menší než blok, je možné alokovat jej v jiném bloku (fragmentace) pokud je záznam větší než blok, je rozdělen do několika bloků udržovaná informace: hlavička záznamu obsahuje příznak: záznam je celý / jedná se o fragment pokud je fragment, jsou zaznamenány další údaje: ukazatel na předchozí fragment ukazatel na další fragment alternativa: velké objekty (BLOBy) se udržují ve skupině (souvislých) bloků pole záznamu pro daný BLOB obsahuje adresy (tabulku adres) bloků Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 8 / 31
Typy databázových souborů nesetříděné soubory: typicky: perzistentní halda rychlé operace: vkládání, mazání pomalé operace: restrikce, modifikace (update) setříděné soubory: soubor je udržován jako setříděný pomocí primárního indexu typicky: perzistentní vyhledávací strom rychlé operace: restrikce (a další relační operace) za pomocí indexu pomalé operace: přidávání, mazání a modifikace dat (vše ostatní) primární sekundární indexy: sekundární indexy pomocné indexy podporující často prováděné dotazy problémy s reindexací Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 9 / 31
B + -stromy B-stromy: rodina vyvážených stromů (různé modifikace) vlastnosti: automaticky udržují potřebné množství úrovní indexů, kolik je potřeba pro data daného rozsahu spravují záznamy v blocích tak, že každý blok je nejvýš z poloviny prázdný implementační aspekty: perzistentní struktury uzly B-stromů mají velikost celého bloku (několika bloků) rozdíl oproti BVS uzly typicky obsahují několik (desítek) klíčů Bayer R, McCreight, E: Organization and Maintenance of Large Ordered Indexes Acta Informatica 1 (3): 173 189 (197) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 10 / 31
Základní požadavky na B + -stromy parametr: n (přirozené číslo) n určuje počet možných klíčů a ukazatelů v každém uzlu stromu počet klíčů je n počet ukazatelů je n + 1 v praxi se n určuje z velikosti bloku, záznamů a ukazatelů základní podmínky, které musejí být splněny: 1 vyhledávací klíče v listových uzlech jsou kopie hodnot z datového souboru vyhledávací klíče v listových uzlech se nacházejí setříděné zleva-doprava 3 ukazatele v listech ukazují přímo na záznamy v datovém souboru 4 ukazatele ve vnitřních uzlech ukazují na další uzly stromu 5 kořenový uzel má vždy aspoň dva ukazatele (až na triviální případ, kdy indexujeme pouze jednu hodnotu, pak je kořen zároveň list) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 11 / 31
Listové uzly B + -stromů listové uzly: poslední ukazatel ukazuje na další listový uzel v řadě (hodnoty uspořádané podle klíčů lze pohodlně procházet) ostatní ukazatele ukazují na záznamy (zakódované n-tice) nejméně n+1 ukazatelů (kromě posledního) je využito (i-tý ukazatel ukazuje na záznam i-tého klíče) nevyužité ukazatele jsou napravo od využitých příklad: pro n = 3 3 31 43 44 58 67 78 79 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 1 / 31
Vnitřní uzly B + -stromů vnitřní uzly: všech n + 1 ukazatelů může ukazovat na uzly stromu na nižších patrech nejméně n+1 ukazatelů je použito (s výjimkou kořene) pokud je použito j ukazatelů, v uzlu je zapsáno j 1 klíčů s následujícím významem: pro ukazatele P 1,, P j a klíče K 1,, K j 1 platí: P 1 ukazuje na uzel, kde jsou klíče ostře menší než K 1 P i ( i < j) ukazuje na uzel, kde jsou klíče z intervalu [K i 1, K i ) P j ukazuje na uzel, kde jsou klíče větší nebo rovny K j 1 nevyužité ukazatele jsou napravo od využitých 3 31 43 k < 3 3 k < 31 31 k < 43 43 k Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 13 / 31
Příklad B + -stromu pro n = 3 13 7 3 5 7 11 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 14 / 31
Využití B + -stromů v relačních databázích typické využití: 1 implementace primárního klíče (hustý index) implementace řídkého indexu v setříděném souboru vyhledávání jedné hodnoty v B + -stromu: zobecnění principu vyhledávání z BVS vyhledávání hodnoty začíná v kořenu pokud jsme v listovém uzlu, vyhledáme konkrétní hodnotu (binární vyhledávání) pokud jsme ve vnitřním uzlu, sestoupíme o patro níž, které odpovídá intervalu hodnot, do kterého padne aktuální hodnota (binární vyhledávání) vyhledávání intervalů hodnot v B + -stromu: nalezneme hodnotu odpovídající dolní mezi intervalu (nebo listový uzel, ve kterém by hodnota měla být) postupujeme zleva-doprava, dokud nenarazíme na horní mez intervalu Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 15 / 31
Modifikace B + -stromů: Vkládání základní schéma: nalezneme listový uzel, do kterého bychom chtěli vložit hodnotu klíče (pokud je v listu místo, úloha je triviální) pokud v daném listovém uzlu není místo (uzel je zaplněný), potom rozdělíme daný uzel na dva uzly, které jsou z poloviny zaplněné vkládaný klíč a hodnota bude v jednom ze dvou vzniklých uzlů potřeba propagovat změnu směrem k rodičovskému uzlu (rozdělení listu znamená přidat jeden klíč do rodiče) pokud je rodičovský uzel plný, rekurzivně pokračujeme s jeho dělením při pokusu vložit klíč do plného kořene je rozdělen kořen na dva (případ, kdy se zvýší výška stromu) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 16 / 31
Příklad vložení hodnoty s klíčem 30 13 7 3 5 7 11 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 17 / 31
Příklad vložení hodnoty s klíčem 30 13 7 3 5 7 11 3 31 43 13 17 19 3 9 30 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 17 / 31
Příklad vložení hodnoty s klíčem 6 13 7 3 5 7 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 18 / 31
Příklad vložení hodnoty s klíčem 6 13 7 3 5 6 7 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 18 / 31
Příklad vložení hodnoty s klíčem 6 13 5 7 3 5 6 7 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 18 / 31
Příklad vložení hodnoty s klíčem 40 13 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 19 / 31
Příklad vložení hodnoty s klíčem 40 13 3 31 43 13 17 19 3 9 31 37 40 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 19 / 31
Příklad vložení hodnoty s klíčem 40 13 3 31 43 13 17 19 3 9 31 37 40 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 19 / 31
Příklad vložení hodnoty s klíčem 40 13 40 3 31 43 13 17 19 3 9 31 37 40 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 19 / 31
Modifikace B + -stromů: Mazání konzervativní přístup: data se nemažou vůbec, pouze se označují, jako smazaná (NULL pointer) rychlé, ale databáze může časem bobtnat (operace typu VACUUM) progresivní přístup: vyhledáme listový uzel, ze kterého chceme mazat (pokud po výmazu zůstane aspoň z poloviny zaplněný, úloha je triviální) pokud po výmazu klíče počet ukazateů klesne pod povolenou mez, potom: pokud má levý nebo pravý sourozenec daného uzlu zaplněnu víc než polovinu uzlů, pak můžeme k aktuálnímu uzlu přidat hodnotu ze sourozence (a aktualizovat rodiče) pokud má levý i pravý sourozenec minimální počet ukazetelů, pak sloučíme aktuální uzel s některým jeho levým/pravým sourozencem, dále je třeba: aktualizovat rodičovský uzel (odstranění jednoho ukazatele) případně propagovat změnu dál do stromu pokud by počet ukazatelů v kořenu klesl na 1, zmenšujeme výšku stromu Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 0 / 31
Příklad smazání hodnoty s klíčem 3 13 7 3 5 7 11 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 1 / 31
Příklad smazání hodnoty s klíčem 3 13 7 5 7 11 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 1 / 31
Příklad smazání hodnoty s klíčem 7 13 7 3 5 7 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 / 31
Příklad smazání hodnoty s klíčem 7 13 7 3 5 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 / 31
Příklad smazání hodnoty s klíčem 7 13 7 3 5 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 / 31
Příklad smazání hodnoty s klíčem 7 13 5 3 5 11 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 / 31
Příklad následného smazání hodnoty s klíčem 11 13 5 3 5 11 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Příklad následného smazání hodnoty s klíčem 11 13 5 3 5 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Příklad následného smazání hodnoty s klíčem 11 13 3 5 3 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Příklad následného smazání hodnoty s klíčem 11 13 13 3 5 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Příklad následného smazání hodnoty s klíčem 11 3 13 3 5 31 43 13 17 19 3 9 31 37 41 43 47 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 3 / 31
Efektivita B + -stromů vyjádření efektivity: podstatné jsou diskové operace (načítání a ukládání bloků/stránek) ve srovnání s tím nepodstatné: reorganizace uzlů probíhající v paměti cena operací pro modifikaci stromu: pro velké hodnoty n (aspoň n 10) platí: výskyt operací rozdělení a slučování uzlů velmi řídký navíc: obvykle jsou operace omezeny na listy a jejich rodiče cena vyhledávání hodnoty: počet diskových operací = výška stromu implementační optimalizace: první dvě patra stromu jsou v paměti řádová složitost vyhledávání/vkládání/mazání: O(log m) (kde m je velikost stromu počet dvojic klíč/hodnota) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 4 / 31
Rozšiřitelné hashovací tabulky rozšiřitelná (a perzistentní) verze hashovacích tabulek: funkce h vrací pro každou hodnotu x vyhledávacího klíče hodnotu h(x) h(x) jsou celá čísla (vyjadřovaná v binárním tvaru) s dostatečným rozsahem (typicky čísla typu integer o velikosti 4 B nebo 8 B) význam: h(x) neurčuje index ( jako u hashovacích tabulek v paměti), ale: pomocí h(x) je vypočítán slot obsahující ukazatel na stránku se záznamy (ve stránce může být záznam s klíčem x) počet slotů dynamicky roste, jeho počet je mocnina parametry algoritmu: h (hashovací funkce) i (aktuální délka binárního prefixu, který se používá na nalezení slotu) Fagin R, Nievergelt J, Pippenger N, Strong H R: Extendible hashing a fast access method for dynamic files ACM Transactions on Database Systems 4 (3): 315 344 (1979) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 5 / 31
Příklad rozšířitelné hashovací tabulky pro parametry: h vracející čísla typu uint3 i = 1 (počáteční hodnota i) 0 1 0001 1 1001 1100 1 význam čísla v hlavičce bloku: číslo i j udává, kolik bitů je použito pro rozlišení záznamů v rámci bloku Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 6 / 31
Vkládání hodnoty: Triviální případ vložení klíče s hashem 0111 : 0 1 0001 1 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 7 / 31
Vkládání hodnoty: Triviální případ vložení klíče s hashem 0111 : 0 1 0001 0111 1 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 7 / 31
Vkládání hodnoty: Zvětšení počtu slotů vložení klíče s hashem 0101 : 0 1 0001 0111 1 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 8 / 31
Vkládání hodnoty: Zvětšení počtu slotů vložení klíče s hashem 0101 : 00 01 10 11 0001 0111 1 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 8 / 31
Vkládání hodnoty: Zvětšení počtu slotů vložení klíče s hashem 0101 : 00 01 10 11 0001 0111 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 8 / 31
Vkládání hodnoty: Zvětšení počtu slotů vložení klíče s hashem 0101 : 00 01 10 11 0001 0111 0101 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 8 / 31
Vkládání hodnoty: Rozdělení bloků bez zvětšení počtu slotů vložení klíče s hashem 1010 : 00 01 10 11 0001 0111 0101 1001 1100 1 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 9 / 31
Vkládání hodnoty: Rozdělení bloků bez zvětšení počtu slotů vložení klíče s hashem 1010 : 00 01 10 11 0001 0111 1001 1100 0101 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 9 / 31
Vkládání hodnoty: Rozdělení bloků bez zvětšení počtu slotů vložení klíče s hashem 1010 : 00 01 10 11 0001 0111 1001 1100 0101 1010 Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 9 / 31
Rozšířitelné hashovací tabulky: Vkládání a mazání vkládání nových záznamů: 1 triviální, pokud má stránka pro vkládání dost místa pokud je stránka plná a j < i, pak: inkrementujeme j a rozdělíme blok na dva rozdělíme záznamy z výchozího bloku do dvou na základě nového j pokusíme se přidat nový záznam (někdy je třeba proces opakovat) 3 pokud je stránka plná a j = i, pak inkrementujeme i a aplikujeme mazání záznamů: obvykle konzervativní výhody/nevýhody: může být rychlejší při vyhledávání než stromy má režii spojenou s reorganizací pole slotů a rozdělováním stránek narozdíl od stromů: nereprezentuje uspořádání Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 30 / 31
Použití zdroje Bayer R, McCreight, E: Organization and maintenance of large ordered indexes Acta Informatica 1 (3): 173 189 (197) Fagin R, Nievergelt J, Pippenger N, Strong H R: Extendible hashing a fast access method for dynamic files ACM Transactions on Database Systems 4 (3): 315 344 (1979) Garcia-Molina H, Ullman J, Widom J: Database Systems: The Complete Book Prentice Hall 008, ISBN 978 013187354 Lehman P, Yao S: Efficient locking for concurrent operations on B-trees ACM Transactions on Database Systems 6 (4): 650 670 (1981) Vychodil V (DAMOL) Indexing structures in RDBMs Nov 8, 013 31 / 31