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