Gli indici bitmap Implement

Transcript

Gli indici bitmap Implement
Indici per il Data Mart
n
Progettazione fisica
Le specifiche caratteristiche dei data mart
permettono di utilizzare classi di indici diverse dal
ben noto B+-tree utilizzato nella maggior parte dei
DBMS commerciali.
ü Accessi in sola lettura
ü Aggiornamento periodico dei dati con possibilità di
riorganizzazione degli indici
ü Accessi ad ampie porzioni di dati
n
Prof. Stefano Rizzi
n
Alcuni indici sono nati in conseguenza delle esigenze
di data warehousing
Altri erano preesistenti ma non venivano utilizzati
Indici Bitmap
Indici di join
Indici Star
94
I B+-tree
Perché i B+-tree non sono più
sufficienti ?
Nodi interni
………
Foglie
Bet Carol Fre
n
…….…
………
………………
Forniscono buone prestazioni quando la selettività
dei predicati è molto elevata.
ü Le interrogazioni OLAP utilizzano spesso predicati a bassa
………………
selettività (es. sesso)
Anne...Betsie
n
n
Betty…Carol
Caroline…Frank
Fred…George
Le foglie contengono tutti i valori di chiave
I nodi interni,
interni organizzati come un B-tree,
costituiscono solo una mappa per consentire una
rapida localizzazione delle chiavi, e memorizzano
dei separatori
n
Sono più adatti a interrogazioni semplici
n
Possono richiedere molto spazio per la loro
memorizzazione
I B+-tree non sono più
più sufficienti ma
rimangono ancora molto utili
95
Gli indici bitmap
n
96
Implementazione dei bitmap
Un indice bitmap su un attributo è composto da una
matrice di bit contenente:
n
ü Tante righe quante sono le tuple della relazione
ü Tante colonne quanti sono i valori distinti di chiave
Normalmente i bitmap sono associati a B+-Tree le cui
foglie contengono vettori di bit invece di RID
ΠNaviga il B+-Tree
• Carica i vettori
Programmatore
dell’attributo
n
di bit corrispondenti
Il bitmap (i,j) è posto a TRUE se nella tupla i-esima è
presente il valore j-esimo
Ž Determina quali bit
sono posti a TRUE
• Recupera le tuple
Esempio: Indice sul campo Posizione della tabella impiegati
Ingegnere – Consulente – Manager – Programmatore
Assistente – Ragioniere
L’impiegato
corrispondente al RID 1 è
un Manager
RID Ing.
1
0
2
0
3
0
4
0
5
0
Cons.
0
0
0
0
0
Man.
1
0
0
0
0
corrispondenti ai RID
RID Ing.
1
0
2
0
3
0
4
0
5
0
Prog. Assis. Rag.
0
0
0
1
0
0
0
1
0
1
0
0
0
0
1
97
Cons.
0
0
0
0
0
Man. Prog. Assis. Rag.
1
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
2,4
98
1
I vantaggi degli indici bitmap
Occupazione su disco
n
Lo spazio richiesto su disco può essere molto ridotto
I/O è molto basso poiché vengono letti solo i vettori di bit
necessari
Ottimi per interrogazioni che non richiedono l’accesso ai dati
Permettono l’utilizzo di operatori binari per l’elaborazione dei
predicati
n
n
n
n
Esempio:
Esempio
NR=10.000.000
Len(Pointer) = 4×8 bit
Esempio: “Quanti maschi in Romagna sono assicurati ?”
?”
RID
Sesso
Assic.
1
M
No
B-tree
Bitmap
Regione
LO
Gli indici bitmap sono adatti ad attributi con una ridotta
cardinalità poiché ogni nuovo valore distinto di chiave richiede
un ulteriore vettore di bit
All’aumentare del numero di chiavi distinte aumenta la sparsità
della matrice
1
0
0
1
2
M
Sì
E/R
1
1
3
F
No
LA
0
0
0
4
M
Sì
E/R
1
1
1
NR×Len(Pointer)
NR × NK × 1 bit
Si ha un risparmio di spazio se:
1
Densità media ≥
Len( RID )
=2
Bitmap VS B-Tree
600
Spazio su disco (MB)
n
500
400
300
200
100
0
0
5
10
15
20
25
30
35
40
Bitmap
La compressione delle matrici riduce il fattore di crescita della
della dimensione
99
Gli indici di proiezione
n
Negozi
1
2
3
4
5
6
7
IDNegozi
123
367
456
785
129
324
…
Negozio
N1
N3
N2
N4
N1
N5
…
Città
RM
MI
FC
RM
BO
MI
…
Stato
I
I
I
I
I
I
…
100
Gli indici di proiezione
Un indice di proiezione per un attributo c con valori a lunghezza
fissa di una relazione R consiste in una struttura in cui vengono
memorizzati in sequenza i valori dell’attributo c in R.
L’ordinamento dei valori rispetta l’ordinamento delle tuple in R.
RID
Agente
R1
R2
R3
R1
R3
R6
…
IX
RM
MI
FC
RM
BO
MI
…
n
L’idea alla base degli indici di proiezione è che la lettura di un
insieme di valori da una struttura “piccola” è più veloce rispetto
alla lettura da una struttura “grande”.
n
Possono essere utilizzati per due tipi di accesso:
ü
Pag 0
Offset 3
Reperimento del valore dell’attributo nota la RID di una particolare
tupla.
Particolarmente vantaggioso rispetto all’accesso alla tabella
quando deve essere recuperata un’elevata percentuale dei
valori poiché si leggeranno più dati dalla stessa pagina.
ü
Pag = RID div Cap
Offset = RID mod Cap
RID = Pag · Cap + Offset
Selezione delle tuple della relazione noto l’insieme di valori da
reperire: si scandisce l’indice e si calcola il corrispondente valore
del RID.
È conveniente rispetto all’accesso tramite B+-tree/bitmap
solo quando il numero di valori distinti per l’attributo e la
percentuale di valori da recuperare sono entrambi elevati.
Cap:
Cap numero dei valori dell’indice memorizzabili in una pagina di disco
Pag:
Pag numero della pagina dell’indice
Offset:
Offset posizione della tupla all’interno della pagina (Pag) dell’indice
101
Gli indici di join
n
n
1
2
3
4
1
2
1
3
2
4
2
Quantità
100
150
350
120
1
2
IDNegozi
123
367
Negozio
N1
N3
Estendono il concetto di indice di join a più tabelle
concatenando i valori delle colonne della fact table e di più
dimension table
IDSett Sett
13
Jan1
24
Jan2
Guadagno
10,00
15,00
35,00
12,00
Negozi
V-Rid N-rid
1
IDProd.
41
17
94
11
n
Negozi
Settimana
Vendite
IDSett.
13
24
36
27
102
Gli indici a stella
Le interrogazioni su schemi a stella richiedono sempre uno o più
join
Un indice di join calcola in anticipo le tuple che soddisfano un
particolare predicato di join
IDNegozi
123
123
367
367
45
NK
B-Tree
Città
RM
MI
Stato
I
I
Agente
R1
R2
L’indice contiene le coppie di RID che soddisfano la
condizione:
Vendite.
Vendite.IDNegozi = Negozi.
Negozi.IDNegozi
Mese
Jan. 1
Jan. 2
VRID NRID SID PID
1
1
1
1
2
1
2
2
3
2
1
2
4
2
2
1
1
2
1
2
3
4
IDNeg IDSett
123
13
123
24
367
13
367
24
Vendite
IDProd Quantità Guadagno
41
100
10,00
17
150
15,00
17
350
35,00
41
120
12,00
Prodotti
1
2
103
IDNegozio Negozio Città Stato
123
N1
RM
I
367
N3
MI
I
IDProd Prodotto Tipo Categoria Fornitore
41
P1
A
X
F1
17
P2
A
X
F1
104
2
Gli indici a stella
n
n
n
Bitmapped join index
Rappresentano esplicitamente l’aspetto multidimensionale dei
dati e dipendono fortemente dall’ordinamento delle colonne.
Sono molto efficienti quando utilizzati in interrogazioni che
coinvolgono tutte o le sole colonne iniziali dell’indice.
Forniscono prestazioni sub-ottime in caso contrario.
n
Permettono di superare la ridotta flessibilità degli indici a stella.
Un bitmapped join index sugli attributi cR della relazione R e cS della
relazione S è una matrice di bit B con tante righe quante sono le tuple di
R e tante colonne quante sono le tuple di S. Il bit Bi,j è posto a 1 se la iesima riga della relazione R e la j-esima riga della relazione S
soddisfano la condizione di join.
n
In altre parole, la matrice B è un indice bitmap sulla relazione R
basato sulle RID della relazione S.
La corrispondenza tra le due relazioni è sancita dal predicato di
join.
n
Il numero di indici a stella necessari a rispondere efficientemente a
interrogazioni che coinvolgono un insieme arbitrario di
dimensioni è funzione del numero di permutazioni dell’insieme
di dimensioni
RID
1
2
3
4
5
…
RID della tabella
VENDITE
1
1
0
0
0
1
…
2
0
1
0
1
0
…
3
0
0
1
0
0
…
RID della tabella
NEGOZIO
…
…
…
…
…
…
…
La riga 4 della tabella
VENDITE è in join con la
riga 2 della tabella
NEGOZIO
105
Bitmapped join index
n
106
Bitmapped join index
Pur realizzando un join tra due tabelle, il bitmapped join index
è utilizzabile anche nell’esecuzione di interrogazioni che
prevedono join multipli tra una fact table FT e le dimension
table DT1…DTn.
select distinct FT.m,DT 1.a1, DT2.a2 …., DTn.an
where FT.a1=DT1.a1 and FT.a2=DT2.a2 and …, FT.an=DTn.an
and DT1.b1=C1 and DT2.b2=C2 and …, DTn.bn=Cn
Supponendo di avere a disposizione
1.
2.
1
Bitmapped join index
FT.ai = DTi.ai
RID 1
n
Indice Bitmap
sull’attributo DTi.bi
Eseguendo
un dimensionale
OR bit a bit sisi
Per
Perogni
ognitabella
bitmapped
join index
ottiene
il valoreledi
RID
i che
RID
che
siidentificano
caricano i vettori
di
bit
soddisfa tutte
le condizioni
soddisfano
eventuali
condizioni
corrispondenti
alle
RID
relative
a una
tabella
sugli
attributi
dimensionali
selezionate
dimensionale
un bitmapped join index per ogni condizione di join FT.ai = DTi.ai
Un indice bitmap per ogni condizione di selezione DT.bj = C
RID 4
RID Val1 Val2
…
Vali
1
1
0
…
0
…
0
2
0
0
…
0
…
1
3
0
1
…
0
…
0
4
0
0
…
1
…
0
5
0
0
…
1
…
0
…
…
…
…
…
…
…
RID 5
RIDi
0
1
2
3
4
5
…
1
0
0
0
1
0
…
2
0
0
0
1
0
…
3
0
1
1
0
0
…
4
1
0
0
0
0
…
0
5
0
0
0
0
1
…
0
1
6
0
1
0
0
0
…
0
0
0
… … … … … … …
…
…
…
1
2
1
0
3
OR
bit a bit
0
0
0
… Valh
1
=
0
0
1
107
Bitmapped join index
RIDi
Si consiglia di creare indici su..
RIDn
RID
0
…
1
…
1
1
1
…
1
…
1
2
1
0
RIDi
AND
bit a bit
…
…
AND
bit a bit
0
0
AND
bit a bit
…
…
AND
bit a bit
0
1
1
…
1
…
1
0
…
0
…
0
…
…
…
…
…
Le tuple della fact table che soddisfano l’interrogazione
vengono determinate eseguendo un AND bit a bit tra gli n
vettori precedentemente creati
108
=
n
3
n
4
5
4
6
n
…
RID che soddisfano
tutte le condizioni
109
Chiavi importate sulla fact table per aumentare la
velocità di esecuzione dei join (B+-Tree o indici di
join, indici star, bitmapped join index)
Attributi dimensionali che sono spesso coinvolti nei
criteri di selezione (B+-Tree o bitmap)
Misure che sono spesso coinvolte in clausole di
selezione (bitmap evoluti)
Se il DBMS non utilizza statistiche per definire il
piano di accesso la creazione degli indici deve
essere valutata con molta attenzione
110
3
Si consiglia di creare indici su..
Il giusto trade-off
n
L’esempio di Redbrick 6.0
Inizio
Su quante DT
è definita una
condizione ?
∃un indice IXFT 1 sulla
FT che inizia con k1
chiave di DT1 ?
Sì
La query richiede
di accedere ai
dati della FT ?
Si
0
No
Esegui la RID intersection per
ricavare le tuple di FT che
soddisfano tutte le condizioni
Esegui l’hash join tra
DT1 e FT
Accedi a DT1
Accedi a IXFT 1
2 o più
∀ DT condizionata accedi alla
tabella e recupera le RID di FT
che soddisfano la condizione
Materializzazione
Miglioramento
prestazioni
1
∀ RID che soddisfa le
condizioni accedi aFT ed
esegui il join con tutte le DT
richieste dal pattern in uscita
Scandisci FT e per
ogni tupla esegui il
join con tutte le DT
No
La determinazione della giusta combinazione di
tecniche di ottimizzazione da utilizzare dipende dallo
spazio su disco a disposizione e dalle caratteristiche
del carico di lavoro
Spazio su disco
Indicizzazione
Frammentazione
Spazio su disco
Spazio su disco
Esegui il join con
tutte le DT i coinvolte
nell’interrogazione
e tali che DTi ≠ DT1
Se il DBMS non utilizza statistiche per definire il
Esegui il raggruppamento
piano di accesso la creazione
degli indici deve
Fine
delle tuple
essere valutata con molta attenzione
Accedi a FT tramite
i RID di IXFT 1
111
Allocazione fisica dei dati
Allocazione fisica dei dati
n
n
112
La progettazione fisica di un data mart non si conclude con la
definizione del piano degli indici, ma contempla un insieme di
parametri che nel loro complesso determinano lo schema
fisico.
Tablespace
I
Tablespace
II
Lo spazio su disco occupato da un database è normalmente
suddiviso in:
Datafile I Datafile II
Tablespace:
Tablespace: suddivisione logica dei dati in unità contenenti
tipologie uniformi di informazioni.
Datafile:
Datafile: file contenente parte delle informazioni di un
tablespace.
3. Blocco dati:
dati unità di informazione letta o scritta dal DBMS.
1.
Datafile III Datafile IV Datafile V
2.
n
Blocco di disco
Organizzazione, dimensione, e disposizione di questi elementi
può incidere notevolmente sulle prestazioni
113
I tablespace
n
114
I datafile
Il livello di astrazione dei tablespace permette di razionalizzare
l’organizzazione dei dati e funge da punto di partenza per il
miglioramento delle prestazioni e della tolleranza ai guasti
ottenibile tramite una coerente allocazione dei relativi datafile.
n
ü
ü
n
n
I fattori da prendere in considerazione sono:
ü
ü
ü
L’omogeneità dei dati
La quantità dei dati
Le tipologie di accesso
Tablespace
SYSTEM
DATA1..., n
AGG1..., n
INDEX1..., m
INDEX_AGG1..., m
RBS
RBS_LOAD
TEMP
TEMP_LOAD
TOOLS1..., h
Un’intelligente allocazione dei datafile sui dischi permette di:
Migliorare le prestazioni grazie all’accesso parallelo a più dischi
Aumentare la resistenza ai guasti
L’ottimizzazione della struttura del database può essere
orientata a due tipi di parallelismo:
ü
InterInter-query minimizza i conflitti dovuti all’esecuzione
contemporanea di più interrogazioni memorizzando in dischi
diversi le informazioni necessarie a interrogazioni distinte.
ü IntraIntra-query massimizza la velocità di esecuzione di ogni singola
interrogazione memorizzando in dischi diversi le informazioni
necessarie a una singola interrogazione.
Descrizione
Tablespace per il dizionario dati
Tablespace per i dati
Tablespace per i dati aggregati
Tablespace per gli indici
Tablespace per gli indici sui dati aggregati
Tablespace di rollback standard
Tablespace di rollback utilizzato durante il caricamento
Tablespace per i dati temporanei
Tablespace per i dati temporanei necessari al caricamento
Tablespace per stored procedure e trigger
Il parallelismo intraintra-query è in generale da preferire nei
sistemi di data warehousing in cui il fattore critico non è
dato dal numero di accessi contemporanei al sistema bensì
dalla complessità delle singole interrogazioni.
115
116
4
I blocchi di disco
n
n
Ogni DBMS permette di specificare la dimensione dei blocchi
di disco, ossia il numero di byte letti/scritti in modo atomico ad
ogni accesso.
La dimensione di un blocco varia tra 0,5 e 256 KB.
ü
Blocchi piccoli sono più adatti per tabelle con tuple di dimensione
ridotta e interrogazioni che coinvolgono poche tuple (sistemi
OLTP)
ü Blocchi grandi sono più adatti per tabelle con tuple di dimensione
elevata e interrogazioni che coinvolgono molte tuple (sistemi
OLAP)
Per i sistemi operazionali si utilizza normalmente una
dimensione di blocco di disco compresa tra i 2 e gli 8
Kbyte, per i sistemi di data warehousing si consiglia
di utilizzare blocchi compresi tra i 32 e i 64 Kbyte.
117
5