Indexing Advanced Databases Outline Database indexing – B-tree – hashing Text indexing – inverted list Casus: protein strings – similarity – dynamic programming – q-gram indexing, BLAST Indexering 1 2 Data files B-tree Ga CREATE INDEX iname ON table(column) USING BTREE; vooralsnog uit van de simpelste organisatie van de data file: de heap Nieuw tupels worden achteraan toegevoegd Snelle toegang op een specifiek attribuut wordt mogelijk gemaakt door een index op dat attribuut Gebalanceerde zoekboom Geschikt voor extern geheugen (disk) knoop correspondeert met block on disk (~16 kB) access time block ~= 3-8 msec Minimaal vullingsniveau gegarandeerd 3 B-tree 4 B-tree Karakteristieken een block heeft ruimte voor n waarden en n+1 pointers vanuit de bladeren wordt verwezen naar de relevante data elk blad verwijst naar het volgende blad (evt. ook naar vorige) een interne knoop heeft tenminste ↑(n+1)/2 pointers (behalve de root) 5 6 1 B-tree Hash index Karakteristieken Typische waarden – – – – CREATE INDEX iname ON table(column) USING HASH (column) 4 byte integers, 8 byte pointers, block size 16kB n = 1364, k = 682 (minimale vulling) diepte=3: MaxEntries ~= 468000 diepte=4: MaxEntries ~= 300 miljoen • schat (ruim) in hoeveel blocks je nodig hebt: M • alloceer genoeg disk ruimte • geef elk blok een virtueel adres: 0..M-1 • kies een hash-functie f die aan elke mogelijke waarde van het attribuut een waarde uit de range 0..M-1 toevoegt • elk bucket bevat pointers naar de actuele records • er kunnen overflow buckets nodig zijn • herstructurering / dynamische varianten Zoeken: O(klog M) Insert/delete: O(klog M) Gedrag wordt vaak gezien als constante: c = 2, 3 of 4 7 Database indexing Aspect Database indexing B-tree Hash index O(log N) O(1) goed redelijk Unieke key ja ja Support voor join ja ja Range query ja nee Search/update Dynamisch gedrag 8 Nog wat kruimels • Bitmap indices • Multidimensional indices • Clustering index • Indexes for main memory (T-tree) 9 Text indexing 10 Inverted list Basic structure: inverted (list / file / index) elk document heeft een unieke docid voor elk woord in je dictionary / vocabulary / lexicon is er een postings list van voorkomens postings lists zijn geschikte structuren voor boolean retrieval 11 12 2 Boolean retrieval Boolean retrieval Query: klimaatneutraal AND comadrinken AND NOT smirten compressie speed van postings list up van merge-scan: – skip pointers – vuistregel (heuristisch): skip distance √|P| |P| is lengte van list Evaluatie: Merge-scan op postings lists 13 14 3