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