Strutture di accesso ai dati: B + -tree

Documenti analoghi
Strutture di accesso ai dati: B + -tree

Strutture fisiche e strutture di accesso ai dati

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees

Tipi di indice. Indici. Leggere sezioni 13.1, 13.2 e 13.3 di Garcia- Molina et al. Tipi di strutture ad indice. ISAM: Indici primari

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

Strutture fisiche di accesso

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

Ottimizzazione e organizzazione fisica

FILE E INDICI Architettura DBMS

Memorizzazione di una relazione

Parte VIII Organizzazione fisica

Strutture fisiche di accesso

Fondamenti teorici e programmazione

ARCHITETTURA DI UN B.D.M.S. Parte IV I Metodi di Accesso ai Dati

una chiave primaria o secondaria => B+tree primario o secondario (NL,g e h diversi) clustered o unclustered => ho un piano di accesso diverso!!

Hash file. idea di base : il file è organizzato in B bucket, i record sono assegnati ai bucket in ragione del valore di chiave.

Organizzazione fisica dei dati

Organizzazione fisica dei dati: Gli Indici

K-d-tree A L B E R T O B E L U S S I A N N O A C C A D E M I C O

Esercizio 10.1 Soluzione

I B+ Alberi. Sommario

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Organizzazione Fisica dei Dati (Parte II)

METODI DI ACCESSO. (INDICI B + -Tree) indici 2

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Ottimizzazione e organizzazione fisica. Primitive del gestore delle pagine. Organizzazione della pagina. Parte VIII. Organizzazione fisica

Strutture Fisiche di Memorizzazione

K-d-tree ALBERTO BELUSSI ANNO ACCADEMICO Caratteristiche di base

Tabelle Hash! Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole

Indici con gli alberi

Algoritmi e Strutture Dati

METODI DI ACCESSO (INDICI) indici 1

Algoritmi, Strutture Dati e Programmi. UD 3.d: Strutture Dati Dinamiche Alberi

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

Algoritmi e Strutture Dati

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino. Prestazioni dei BST

Alberi binari di ricerca

Algoritmi e Strutture Dati

Sistemi Informativi Territoriali

Pag Politecnico di Torino 1

Informatica 3. LEZIONE 27: Strutture ad albero avanzate. Modulo 1: Trie Modulo 2: Alberi bilanciati Modulo 3: Strutture dati spaziali

D B M G D B M G 2. Gestione degli indici. Introduzione Strutture fisiche di accesso Definizione di indici in SQL Progettazione fisica

Esercizi su alberi binari

algoritmi e strutture di dati

Progettazione Fisica

Parte 6 Esercitazione sull accesso ai file

Heap e code di priorità

Alberi Binari di Ricerca

1 Realizzazione di un Indice Primario con chiavi senza duplicati

Algoritmi e strutture dati

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Laurea On Line Anno Accademico 2003/2004 II Prova in itinere

Hashing e indici multidimensionali

Alberi binari. Alberi binari di ricerca

Tabelle Hash. Implementazioni Dizionario. Implementazione. Tabelle ad accesso diretto. Tempo richiesto dall operazione più costosa:

Informatica 3. Informatica 3. LEZIONE 27: Strutture ad albero avanzate. Lezione 27 - Modulo 1. Trie (1) Trie binario

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

Informatica 3. Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Lezione 21 - Modulo 1. Introduzione (1) Introduzione (2) Ricerca:

d. Cancellazione del valore 5 e. Inserimento del valore 1

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati

Organizzazione fisica e gestione delle interrogazioni

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Esercizi proposti a lezione cap. 1 rev. ott da Atzeni e altri - Basi di dati vol. 2 ed/ ORGANIZZAZIONE FISICA

Progettazione Fisica - 1. Concetti di Base - 1. Indici. Progettazione di Basi di Dati. Assunzioni Fondamentali

Strutture dati Alberi binari

Basi di dati II Prova parziale 23 maggio 2016 Compito A

5. Strutture di indici per file

Problemi di ordinamento

Algoritmi e Strutture di Dati

Algoritmi e strutture dati

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

Laboratorio di Algoritmi

Il numero dei nodi al livello i è 1, per 0 i altezza L altezza h di un albero completamente sbilanciato con n nodi è h = n-1

Tavole hash. Alcune possibili implementazioni dell ADT Dizionario. Tavole ad accesso diretto. Tempo richiesto dall operazione più costosa:

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Algoritmi e strutture dati

Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi, anno accademico 2011/12

alberi completamente sbilanciati

Multi-way search trees

In questa lezione Alberi binari di ricerca: la cancellazione

Alberi ed Alberi Binari di Ricerca

1. ORGANIZZAZIONE AD ALBERO_B

Algoritmi e Strutture Dati

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

Metodi di Join. Corso di Basi di Dati e Sistemi Informativi

Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo

Tipi di dato e Strutture dati elementari

Tavole (o tabelle) hash

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Transcript:

Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 1 1-2 0 1 2

Osservazione Quando l indice aumenta di dimensioni, non può risiedere sempre in memoria centrale: di conseguenza deve essere gestito in memoria secondaria. È possibile utilizzare un FILE SEQUENZIALE ORDINATO per rappresentare l indice in mem. sec. Le prestazioni di accesso a tale struttura fisica a fronte di inserimenti/cancellazioni tendono a degradare e richiedono frequenti riorganizzazioni. Inoltre è disponibile solo l accesso sequenziale. Per superare il problema si introducono per gli indici strutture fisiche diverse. Tra queste analizzeremo: le strutture ad albero e le strutture ad accesso calcolato.

B + -tree: caratteristiche Caratteristiche generali dell indice B + -tree: è una struttura ad albero; ogni nodo corrisponde ad una pagina della memoria secondaria; i legami tra nodi diventano puntatori a pagina; ogni nodo ha un numero elevato di figli, quindi l albero ha tipicamente pochi livelli e molti nodi foglia; l albero è bilanciato: la lunghezza dei percorsi che collegano la radice ai nodi foglia è costante; inserimenti e cancellazioni non alterano le prestazioni dell accesso ai dati: l albero si mantiene bilanciato.

B + -tree: struttura Struttura di un B + -tree (fan-out = n) NODO FOGLIA può contenere fino a (n-1) valori della chiave di ricerca e fino a n puntatori. m n p 1 K 1 p 2 p m-1 K m-1 p m i<j K i <K j Punta alla prima tupla con chiave K 1 (indice primario). Punta al bucket di puntatori verso le tuple con chiave K 1 (indice secondario). variante: al posto dei valori chiave il nodo foglia contiene direttamente le tuple (struttura integrata dati/indice)

B + -tree: struttura Struttura di un B + -tree (fan-out = n) NODO FOGLIA (vincolo di ordinamento) I nodi foglia sono ordinati. Inoltre, dati due nodi foglia L i e L j con i<j risulta: K t L i : K s L j : K t <K s Il puntatore p m del nodo L i punta al nodo L i+1 se esiste. L i p 1 K 1 p 2 p m-1 K m-1 L i+1 p 1 K 1 p 2 p m-1 K m-1 p m

B + -tree: struttura Struttura di un B + -tree (fan-out = n) NODO INTERMEDIO può contenere fino a n puntatori a nodo. p 1 K 1 p 2 K i-1 p i K i p m -1 K m -1 p m m n Punta al sottoalbero con chiavi k tali che: k<k 1 Punta al sottoalbero con chiavi k tali che: K i-1 k <K i Punta al sottoalbero con chiavi k tali che: K m -1 k

B + -tree: vincoli di riempimento (regole di bilanciamento) Struttura di un B + -tree (fan-out = n) NODO FOGLIA (vincolo di riempimento) Ogni nodo foglia contiene un numero di valori chiave #chiavi vincolato come segue: ( n 1) / 2 # chiavi ( n 1) NODO INTERMEDIO (vincolo di riempimento) Ogni nodo intermedio contiene un numero di puntatori #puntatori vincolato come segue (non vale per la radice): Arrotondamento all intero superiore più vicino n / 2 # puntatori n

B + -tree: operazioni Ricerca dei record con chiave K Passo 1 Cercare nel nodo (radice) il più piccolo valore di chiave maggiore di K. Se tale valore esiste (supponiamo sia K i ) allora seguire il puntatore p i. K = 15 p 1 3 p 2 15 p i 19 p m-1 123 p m Punta al sottoalbero con chiavi k tali che: 15 k <19 Se tale valore non esiste seguire il puntatore p m. K = 124 p 1 3 p 2 15 p i 19 p m-1 123 p m Punta al sottoalbero con chiavi k tali che: 123 k

B + -tree: operazioni Ricerca dei record con chiave K Passo 2 Se il nodo raggiunto è un nodo foglia cercare il valore K nel nodo e seguire il corrispondente puntatore verso le tuple, altrimenti riprendere il passo 1. K = 15 p 1 3 p 2 11 p i 15 p m-1 16 p m Punta alle tuple con valore K = 15

B + -tree: profondità dell albero Osservazione Il costo di una ricerca nell indice, in termini di numero di accessi alla memoria secondaria, risulta pari al numero di nodi acceduti nella ricerca. Tale numero in una struttura ad albero è pari alla profondità dell albero, che nel B + -tree è indipendente dal percorso ed è funzione del fan-out n e del numero di valori chiave presenti nell albero #valorichiave: prof B tree 1 log n / 2 # valorichiave ( n 1) / 2

B + -tree: operazioni Inserimento di un nuovo valore della chiave K Passo 1: ricerca del nodo foglio NF dove il valore K va inserito Passo 2: se K è presente in NF, allora: Indice primario: nessuna azione Indice secondario: aggiornare il bucket di puntatori altrimenti, inserire K in NF rispettando l ordine e: Indice primario: inserire puntatore alla tupla con valore K della chiave Indice secondario: inserire un nuovo bucket di puntatori contenente il puntatore alla tupla con valore K della chiave. K = 15 NF NF p 1 3 p 2 8 p i 12 p m-1 16 p m p 1 3 p 2 8 p i 12 p i+1 15 p m-1 16 p m se non è possibile inserire K in NF, allora eseguire uno SPLIT di NF.

B + -tree: operazioni Inserimento di un nuovo valore della chiave K SPLIT di un nodo foglia Nel nodo da dividere esistono n valori chiave, si procede come segue: Creare due nodi foglia; Inserire i primi (n-1)/2 valori nel primo; Inserire i rimanenti nel secondo; Inserire nel nodo padre un nuovo puntatore per il secondo nodo foglia generato e riaggiustare i valori chiave presenti nel nodo padre. Se anche il nodo padre è pieno (n puntatori già presenti) lo SPLIT si propaga al padre e così via, se necessario, fino alla radice.

B + -tree: operazioni Inserimento di un nuovo valore della chiave K Esempio di SPLIT di un nodo foglia (fan-out = 5) 20 98 K = 15 p 1 3 p 2 8 p 3 12 p 4 16 altri nodi foglia SPLIT 12 20 98 p 1 3 p 2 8 p 3 12 p x 15 p 4 16 altri nodi foglia

B + -tree: operazioni Cancellazione di un valore della chiave K Passo 1: ricerca del nodo foglia NF dove il valore K va cancellato Passo 2: cancellare K da NF insieme al suo puntatore: Indice primario: nessuna azione Indice secondario: liberare il bucket di puntatori K = 12 p 1 3 p 2 8 p 3 12 p m-1 16 p m p 1 3 p 2 8 p m-1 16 p m se dopo la cancellazione di K da NF viene violato il vincolo di riempimento minimo di NF, allora eseguire un MERGE di NF.

B + -tree: operazioni Cancellazione di un valore della chiave K MERGE di un nodo foglia Nel nodo da unire esistono (n-1)/2-1 valori chiave, si procede come segue: Individuare il nodo fratello adiacente da unire al nodo corrente; Se i due nodi hanno complessivamente al massimo n-1 valori chiave, allora si genera un unico nodo contenente tutti i valori si toglie un puntatore dal nodo padre si aggiustano i valori chiave del nodo padre Altrimenti si distribuiscono i valori chiave tra i due nodi e si aggiustano i valori chiave del nodo padre Se anche il nodo padre viola il vincolo minimo di riempimento (meno di n/2 puntatori presenti), il MERGE si propaga al padre e così via, se necessario, fino alla radice.

B + -tree: operazioni Cancellazione di un valore della chiave K Esempio di MERGE di un nodo foglia (fan-out = 5) 12 20 98 K =3 p 1 3 p 2 8 p 3 12 p 4 15 p 5 16 altri nodi foglia MERGE 20 98 p 2 8 p 3 12 p 4 15 p 5 16 altri nodi foglia

Strutture ad accesso calcolato (hashing) Caratteristiche generali delle strutture ad accesso calcolato: si basano su una funzione di hash che mappa le chiavi sugli indirizzi di memorizzazione delle tuple nelle pagine dati della memoria secondaria; h: K B K: dominio delle chiavi, B: dominio degli indirizzi Uso pratico di una funzione di hash Si stima il numero di valori chiave che saranno contenuti nella tabella; Si alloca un numero di bucket di puntatori (B) uguale al numero stimato; Si definisce una funzione di FOLDING che trasforma i valori chiave in numeri interi positivi: f: K Z + Si definisce una funzione di HASHING: h: Z + B

Strutture ad accesso calcolato (hashing) Caratteristica di una buona funzione di HASHING: Distribuire in modo UNIFORME e CASUALE i valori chiave nei bucket. N.B.: è pesante cambiare la funzione di hashing dopo che la struttura d accesso è stata riempita.

Esempio 1 2 3 4 5 6 7 Buckets File sequenziale ordinato (dati) A 102 Rossi 120 B 110 Rossi 345 B 98 Bianchi 1000 E 17 Neri 1200 E 102 Verdi 950 F 113 Bianchi 4000 H 53 Neri 3000 Funzione di hashing Filiale h(f()) A 3 B 4 E 6 F 4 H 3

Strutture ad accesso calcolato (hashing) Operazioni RICERCA Dato un valore di chiave K trovare la corrispondente tupla Calcolare b=h(f(k)) (costo zero) Accedere al bucket b (costo: 1 accesso a pagina) Accedere alle n tuple attraverso i puntatori del bucket (costo: m accessi a pagina con m<n) INSERIMENTO E CANCELLAZIONE Di complessità simile alla ricerca.

Strutture ad accesso calcolato (hashing) Osservazione La struttura ad accesso calcolato funziona se i buckets conservano un basso coefficiente di riempimento. Infatti il problema delle strutture ad accesso calcolato è la gestione delle COLLISIONI. COLLISIONE: si verifica quando, dati due valori di chiave K 1 e K 2 con K 1 K 2, risulta: h(f(k 1 )) = h(f(k 2 )) Un numero eccessivo di collisioni porta alla saturazione del bucket corrispondente.

Collisioni Probabilità che un bucket riceva t chiavi su n inserimenti: dove B è il numero totale di buckets. Probabilità di avere più di F collisioni (F: numero di puntatori nel bucket): ) ( 1 1 1 ) ( t n t B B t n t p F i K i p p 0 ) ( 1

Gestione delle Collisioni Un numero eccessivo di collisioni sullo stesso indirizzo porta alla saturazione del bucket corrispondente. Per gestire tale situazione si prevede la possibilità di allocare Bucket di overflow, collegati al Bucket di base. 1 2 3 N.B.: Le prestazioni della ricerca peggiorano in quanto individuato il bucket di base, potrebbe essere poi necessario accedere ai buckets di overflow. 4

Confronto B + -tree e Hashing Ricerca: Selezioni basate su condizioni di uguaglianza A = cost Hashing (senza overflow buckets): tempo costante B + -tree: tempo logaritmico nel numero di chiavi Selezioni basate su intervalli (range) A>cost 1 AND A<cost 2 Hashing: numero elevato di selezioni su condizioni di uguaglianza per scandire tutti i valori del range B + -tree: tempo logaritmico per accedere al primo valore dell intervallo, scansione sui nodi foglia fino all ultimo valore compreso nel range.