n-D Indices
Transcript
n-D Indices
Strutture di Indicizzazione n-Dimensionali Tecnologie delle Basi di Dati M Interrogazioni multi-dimensionali • Come abbiamo visto, B+-tree è in grado di risolvere interrogazioni che coinvolgono più attributi • Quali query sono risolvibili utilizzando un indice multi-attributo? • L‟efficienza in risoluzione è sufficiente? 2 Tipi di interrogazioni n-dimensionali • A1 = v1, A2 = v2, … , An = vn (point query) • l1 ≤ A1 ≤ h1, l2 ≤ A2 ≤ h2, … , ln ≤ An ≤ hn (window query) • A1 ≈ v1, A2 ≈ v2, … , An ≈ vn (nearest neighbor query) • E se il valore del dato non è “puntuale”? 3 Esempi di utilizzo • Sistemi informativi geografici/spaziali • Coordinate di punti • Luoghi, città • Oggetti con estensione • Regioni, vie, fiumi • Basi di dati multimediali • Ricerca basata sul “contenuto” • Rappresentazione del contenuto per mezzo di caratteristiche numeriche • La similarità del contenuto si ottiene valutando la similarità delle caratteristiche • … 4 Uso di B+-tree • Supponiamo di avere una window query su 2 attributi (A,B) • Ogni intervallo rappresenta il 10% del totale • Ci aspettiamo di recuperare l‟1% dei dati • Soluzioni possibili: • 1 B+-tree bi-dimensionale (A,B) • 2 B+-tree mono-dimensionali (A),(B) 5 1 B+-tree bi-dimensionale (A,B) • Capacità foglie = 3 record B A 6 2 B+-tree mono-dimensionali • In questo caso si accede al 20% dei dati B B A A 7 Efficienza di B+-tree • In entrambi i casi troppo lavoro sprecato • La causa è nel fatto che punti vicini nello spazio sono assegnati a foglie lontane • In un caso dalla “linearizzazione” degli attributi • Nell‟altro dall‟ignorare l‟altro attributo • Gli indici multi-dimensionali (spaziali) cercano di mantenere la prossimità spaziale dei record 8 Indicizzazione spaziale • Problema nato negli anni „70 a causa dell‟insorgere di problemi 2/3-D • • • • Cartografia Geographic Information Systems VLSI CAD • Recuperato negli anni „90 per risolvere i problemi posti da nuove applicazioni • DB multimediali • Data mining 9 Indici spaziali: diversi approcci • Derivati da strutture 1-D • k-d-B-tree, EXCELL, Grid file • Mapping da n-D a 1-D • Z-order, Gray-order • Strutture ad-hoc • R-tree, R*-tree, X-tree, … • Totale: centinaia di strutture dati 10 Indici spaziali: classificazioni • Tipo di oggetti • Per punti (i record non possono avere un‟estensione spaziale) • Per regioni • Tipo di suddivisione • Sullo spazio (le divisioni avvengono sulla base di considerazioni globali, stile linear hashing) • Buona per distribuzioni uniformi, semplice da gestire • Sugli oggetti (le divisioni avvengono sulla base di considerazioni locali, stile B-tree) • Buona per distribuzioni arbitrarie, complicata da gestire • Tipo di organizzazione • Basata su albero/hash 11 Indici spaziali: generalità • Requisito di base (Local Order Preservation) • Raggruppare gli oggetti (punti) in pagine, garantendo che all‟interno di ciascuna pagina vi siano oggetti “vicini” nello spazio n-D • Esclude l‟uso di funzioni hash che non preservano l‟ordine • Il problema è non banale in quanto in n-D non è definito un ordine globale • Alcune soluzioni definiscono un ordine in n-D • Approccio generale • Organizzare lo spazio in regioni (o celle) • Ogni cella corrisponde (non sempre 1-1) con una pagina 12 k-d-tree (Bentley, 1975) • È una struttura pensata per la memoria centrale • Non paginata • Non bilanciata (problemi?) • Albero binario di ricerca • Ogni livello è etichettato (ciclicamente) con una delle n coordinate • In ogni nodo c‟è un separatore, dato dal valore mediano dell‟intervallo che si sta partizionando 13 k-d-tree: esempio • Supponiamo che ogni foglia possa contenere fino a 3 oggetti ≤ A1 B ≤ B1 B2 ≤ A2 >A1 A B >B1 A >A2 B B1 A2 A1 A 14 k-d-tree: ricerca • Si seguono tutti i rami interessati dalla query ≤ A1 B ≤ B1 B2 ≤ A2 >A1 A B >B1 A >A2 B B1 A2 A1 A 15 k-d-tree: considerazioni • In inserimento si cerca la foglia in cui inserire il nuovo oggetto • Se la foglia è piena: split (verso il basso) • L‟albero non è bilanciato • Va riorganizzato periodicamente • Cancellazioni estremamente complicate • Diverse varianti per gestire in maniera diversa i separatori, es: • BSP tree usa iperpiani non paralleli agli assi • VAMsplit kd-tree sceglie la coordinata migliore di split per ogni nodo come quella avente la maggior varianza 16 k-d-B-tree (Robinson, 1981) • Versione paginata del k-d-tree • La struttura risultante assomiglia ad un B+-tree • Ogni nodo (pagina) corrisponde ad una regione (iper-)rettangolare (box, brick) dello spazio ottenuta come unione delle regioni figlie • Internamente, i nodi sono organizzati come dei k-d-tree • La “grandezza” dell‟albero dipende dalla capacità di una pagina 17 k-d-B-tree: esempio root A B B G B1 D H A B D E E F G C H I J K C I root K ≤ A1 >A1 J F ≤ B1 A1 A A C >B1 B 18 k-d-B-tree: overflow di un nodo • Se un nodo indice (regione) va in overflow, la situazione è più complessa che nel B-tree • Es.: split del blocco dati E • si partiziona E, quindi A, e infine anche la radice B B E G B B H A D E’ I R’ C K F R’’ J A’ A A A 19 k-d-B-tree: split • Una ridistribuzione bilanciata non è sempre possibile • Nessun limite inferiore sull‟utilizzazione di memoria allocata (~50-70%) • Nell‟esempio, A è stata partizionata in A e A‟ sulla base del primo separatore • Algoritmo di Robinson • Si considera un iperpiano che distribuisca in modo equilibrato i nodi • Gli split si propagano anche verso il basso (ai discendenti) 20 k-d-B-tree: algoritmo di Robinson • La regione A viene suddivisa in A‟ e A‟‟ • D viene suddivisa in D e D‟ B B D E G D’ E’ I A H B R’ A’ K F B R’’ C J A A A 21 hB-tree (Lomet & Salzberg, 1990) • Variante del k-d-B-tree • Le regioni possono contenere dei “buchi” (hB = “holey brick”) • Effetti positivi: • Split di un blocco dati: Si riesce a garantire che i dati si ripartiscano al peggio in un rapporto 2:1 (2/3 in un blocco e 1/3 nell‟altro) • Split di un nodo indice: Si ottiene un bilanciamento (e quindi un limite inferiore all‟occupazione di memoria) senza dover propagare gli split ai discendenti 22 hB-tree: split di una pagina dati A B ≤ A1 >A1 B1 ≤ B1 A1 A A >B1 B • Come nel k-d-B-tree, ogni nodo è internamente organizzato come un k-d-tree • La differenza è che ogni nodo può essere “puntato” da diverse separazioni 23 hB-tree: esempio di split (i) B G B F E C A B A D G E C D E G F A • Supponiamo che ogni pagina possa contenere al più 7 nodi • La radice è in overflow 24 hB-tree: esempio di split (ii) B G Nodo radice N” B F N’ E N” C N” N’ A Nodo N” Nodo N‟ D A E C D “external” A B G E G F 25 25 EXCELL (Tamminen, 1982) • Usa una directory hash-based, griglia regolare in n dimensioni • Ogni cella della directory corrisponde a una pagina dati, ma non necessariamente viceversa • L‟indirizzo di una cella è formato facendo l‟interleaving dei bit delle coordinate • Estende l‟extendible hashing a più dimensioni EXCELL: esempio B 1 C D E E 010 011 110 111 A B C D E Area dati 0 A A B B 000 001 100 101 00 01 10 11 Directory A • Quando una pagina dati va in overflow, si esegue uno split e, per la directory, si hanno due casi • se il blocco era referenziato da due (o più) celle si modificano solo i puntatori • altrimenti si raddoppia la directory, usando un bit in più 27 EXCELL: split (i) B 1 C D E E 010 011 110 111 A B C D E F Area dati 0 A F B B 000 001 100 101 00 01 10 11 Directory A • Primo caso: A in overflow viene divisa in A e F • È sufficiente modificare il puntatore della cella 001 28 EXCELL: split (i) B 11 10 01 00 G D E E 0101 0111 1101 1111 C D E E 1100 1110 B B 0100 0110 A F A B C D E F G Area dati 0001 0011 1001 1011 A F B Directory B 0000 0010 1000 1010 00 01 10 11 A • Secondo caso: C in overflow viene divisa in C e G • Occorre raddoppiare la directory usando un bit in più per la coordinata B 29 EXCELL: considerazioni • Valgono gli stessi ragionamenti visti per extendible hashing • Non sempre il raddoppio della directory riesce a risolvere l‟overflow di un bucket (perché?) • Funziona bene in caso di distribuzione uniforme dei dati 30 Grid file (Nievergelt et al., 1984) • Generalizza EXCELL, permettendo la definizione di intervalli di ampiezza arbitraria • A tale scopo, sono necessarie d scale, che contengono i valori usati come separatori in ciascuna dimensione • Nel caso di intervalli definiti mediante partizionamento binario, le scale sono di fatto analoghe alla directory del dynamic hashing 31 Grid file: esempio B B2 B C E A C E A C D A A2 C D E Area dati B1 A1 B Directory A • Quando una pagina dati va in overflow, si esegue uno split e, per la directory, si hanno due casi • se il blocco era referenziato da due (o più) celle si modificano solo i puntatori • altrimenti si aggiunge un separatore alla directory 32 Grid file: split (i) B B2 B C E A C E A F D A A2 C D E F Area dati B1 A1 B Directory A • Primo caso: C in overflow viene divisa in C e F • È sufficiente modificare il puntatore della cella 33 Grid file: split (ii) B B2 B C E E A C E E A F D G A A2 A3 C D E F G Area dati B1 A1 B Directory A • Secondo caso: D in overflow viene divisa in D e G • Occorre aumentare directory suddividendo ulteriormente, ad esempio, la coordinata A 34 Grid file: considerazioni • In caso di distribuzioni non uniformi, la gestione di N punti può richiedere un numero di celle O(Nd) • Per contro, la struttura regolare del partizionamento dello spazio semplifica la risoluzione di window query • Problema principale: organizzazione della directory • Normalmente le scale sono mantenute in memoria centrale • In casi (quasi-)statici la directory può essere memorizzata come array multi-dimensionale su disco • In casi dinamici è necessario paginare la directory, il che porta a Grid file multi-livello 35 Ordinamento mono-dimensionale • Si cerca di “linearizzare” lo spazio n-dimensionale in modo da poter utilizzare una struttura monodimensionale, come B+-tree • Si ottengono delle curve che “riempiono lo spazio” (space-filling curve) • Perché siano utili, tali curve devono fare in modo che punti vicini nello spazio siano vicini anche nella linearizzazione (requisito di località) 36 Esempi di curve (i) • Z-order B B A B A B • Peano-Hilbert A A 37 Esempi di curve (ii) • Gray-order B B A B A B • Ordine lessicografico A A 38 Space-filling curves: considerazioni • Come è evidente, il requisito di località non è soddisfatto da nessuna delle curve • La ricerca per window query soffre quindi degli stessi problemi del B+-tree multi-attributo • Possiamo notare analogie/equivalenze? • La ricerca nearset neighbor si complica ulteriormente… 39 R-tree (Guttman, 1984) • Struttura ad albero bilanciata e paginata, basata sull‟innestamento gerarchico di overlapping regions • Ogni nodo corrisponde ad una regione rettangolare, definita come l‟MBB che contiene tutte le regioni figlie • L‟utilizzazione di ogni nodo varia tra il 100% e un valore minimo (≤ 50%) che è un parametro di progetto dell‟R-tree • Meccanismi di gestione simili a quelli del B+-tree, con la differenza che l‟inserimento di un oggetto e gli eventuali split che ne conseguono possono essere gestiti con politiche diverse 40 R-tree: concetto di MBB • MBB = Minimum Bounding Box • Il più piccolo rettangolo, con i lati paralleli agli assi coordinati, che contiene tutte le regioni figlie • È definito come un prodotto di n intervalli 2-D box 3-D box 41 R-tree: definizione di MBB (i) • Quanti vertici ha un (iper-)rettangolo n-dimensionale? 2n • Per definire un (iper-)rettangolo occorre specificare le coordinate di tutti i suoi vertici • Inoltre l‟algoritmo di calcolo dell‟(iper-)rettangolo più piccolo che contenga un insieme di N punti ha complessità • O(N2) in 2-dim • O(N3) in 3-dim • Non è noto alcun algoritmo per dim>3 42 R-tree: definizione di MBB (ii) • Quanti valori servono per definire una box? 2n • È sufficiente considerare le coordinate di due qualsiasi vertici opposti • Qual è la complessità dell‟algoritmo di calcolo della MBB per un insieme di N punti? O(N) • Basta trovare i valori minimo e massimo per ogni coordinata 43 R-tree: confronto con B+-tree B+-tree • • • • Albero bilanciato e paginato I dati si trovano nelle foglie Le foglie sono ordinate Organizza i dati in intervalli 1-D • Gli intervalli non si sovrappongono • Il principio viene applicato ricorsivamente verso l‟alto • La ricerca puntuale segue un solo percorso dalla radice alle foglie R-tree • • • • Albero bilanciato e paginato I dati si trovano nelle foglie Non esiste ordine tra i dati Organizza i dati in intervalli n-D (MBB) • Gli intervalli si sovrappongono (caratteristica dello spazio n-D) • Il principio viene applicato ricorsivamente verso l‟alto • La ricerca puntuale segue più percorsi dalla radice alle foglie 44 R-tree: organizzazione B A L E D G H F I M J ABC K N P A DE F GH O C D B C I J K LM NO P …………………………... P 45 Indici per query di similarità R-tree: caratteristiche (i) • Nodi foglia • Contengono entry del tipo (key, RID), dove la key contiene le coordinate del record • In realtà, R-tree può anche gestire oggetti n-dim con un‟estensione spaziale, quindi key=MBB • Nodi interni • Contengono entry del tipo (MBB, PID), dove la MBB contiene le coordinate della MBB delle entry dei figli • Uniformando, ogni nodo contiene delle entry (key, ptr) dove key è un valore “spaziale” 46 R-tree: caratteristiche (ii) • Ogni nodo contiene un numero di entry m che può variare tra c e C • c≤C/2 è un parametro di utilizzazione • C dipende da n e dalla dimensione della pagina • La radice può violare il vincolo di minima utilizzazione ed avere anche due sole entry 47 R-tree: ricerca (window query) • Occorre trovare tutti i dati inclusi in un prodotto di n intervalli (ovvero in una box) • Tali dati possono trovarsi solamente in nodi la cui MBB ha sovrapposizione con la query • Es.: il nodo N‟ non può contenere record che soddisfino la query Nodo N‟ query Nodo N 48 R-tree: esempio di ricerca B A L E D G H F q I M J ABC K N P A DE F GH O C D B C I J K LM NO P …………………………... P 49 Indici per query di similarità R-tree: algoritmo di ricerca • Consistent(E,q) • Input: Entry E=(p,ptr) e predicato di ricerca q • Output: if p & q == false then false else true • Sia p che q sono (iper-)rettangoli • Consistent restituisce true se e solo se p e q hanno sovrapposizione (overlap) non nulla • Consistent è indifferente alla “forma” di q • Può anche essere usato per altre query (range, NN) • Ne consegue che la ricerca può seguire più percorsi nell‟albero 50 R-tree: algoritmi di costruzione • Occorre specificare i key methods Union, (Compress, Decompress, ) Penalty e PickSplit • Esistono diverse “varianti” di R-tree, ognuna delle quali si differenzia dalle altre per uno o più modi di implementare tali scelte • Vedremo la realizzazione della versione originale di R-tree e discuteremo alcune varianti • Una delle più comuni è R*-tree (Beckmann et al, 1990) 51 R-tree: Union • Union(P) • Input: Insieme di entry P = {(p1,ptr1),…,(pn,ptrn)} • Output: Un predicato r che vale per tutte le tuple accessibili tramite uno dei puntatori delle entry • Sia r che i pj sono (iper-)rettangoli • Si restituisce la MBB contenente tutti i pj • È sufficiente calcolare il valore minimo e massimo su ogni coordinata 52 R-tree: Penalty (i) • Penalty(E1,E2) • Input: Entries E1 = (p1,ptr1) e E2 = (p2,ptr2) • Output: Un valore di “penalità” che risulta dall‟inserire E2 nel sotto-albero con radice E1 • Qual è il nodo migliore per inserirvi un punto? A p B B A p C C Indici er query di similarità 53 R-tree: Penalty (ii) • Se p si trova all‟interno di E1, la penalità è 0 • Altrimenti, la penalità è data dall‟incremento di volume (area) della MBB • Se, però, siamo in una foglia, R*-tree considera l‟incremento di sovrapposizione con le altre entry • Entrambi i criteri cercano di ottenere un albero con migliori prestazioni: • Volume grande: aumento della probabilità di visitare un nodo durante una query • Overlap grande: aumento del numero di nodi visitati da una query 54 R-tree: Picksplit (i) • PickSplit(P) • Input: Insieme di C+1 entry • Output: Due insiemi di entry, P1 e P2, di cardinalità ≥c N p p N1 N1 p N2 ? C = 16 c=6 N2 55 R-tree: Picksplit (ii) • Cercare la divisione che porta a minimizzare la somma dei volumi dei due nodi • Sfortunatamente, è un problema NP-hard, quindi si usano delle euristiche • La cosa si complica nei nodi superiori • In particolare, non è garantito che si trovi uno split ad overlap nullo N1 N N1 ? C=7 c=3 N2 N2 56 R-tree: Picksplit (iii) • Il criterio adottato da R*-tree è più complicato e tiene in considerazione sia il volume dei nodi che il loro overlap ed il perimetro • Inoltre, R*-tree supporta la re-distribuzione sia in overflow che in underflow • Tutte queste scelte sono effettuate in maniera euristica, in quanto la loro efficienza viene validata unicamente in modo sperimentale • Si ottengono (lievi) miglioramenti nelle prestazioni in inserimento, occupazione e ricerca 57