Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoUmberto Arnaldo Benedetti Modificato 8 anni fa
1
Esercizio Una tabella Pubblicazioni ha chiave primaria CodPubbl e come chiave candidata l'ISBN. La tabella contiene 1.000.000 di tuple ed è memorizzata tramite un'organizzazione fisica hash che utilizza l'attributo CodPubbl come chiave e presenta un livello di riempimento dell'80% (si hanno in media 10 tuple per blocco, quindi il numero di accessi medi è pari a 1.11).
2
PRIMO QUESITO a) Trascurando l'impatto dei meccanismi di caching e quantificando solamente il numero di operazioni di lettura su disco, valutare il costo di esecuzione della seguente query: select * from Pubblicazioni where ISBN = '001122345' and ( CodPubbl = 'ABC123' or CodPubbl = 'DEF456' )
3
Soluzione primo quesito Disponendo di una struttura basata su hash per un attributo e nulla per l'altro, il planner decide di accedere innanzitutto tramite la parte "or". Questo comporta due tentativi di trovare la tupla (perché due sono i valori di confronto), il che comporta 2,22 accessi in media.
4
SECONDO QUESITO b) È inoltre presente una struttura ad albero come indice secondario sull'attributo ISBN, con fan out medio pari a 100. Trascurando anche in questo caso il contributo dei meccanismi di caching, valutare il numero medio di letture necessario per eseguire la query precedente, motivando la risposta. select * from Pubblicazioni where ISBN = '001122345' and ( CodPubbl = 'ABC123' or CodPubbl = 'DEF456' )
5
Soluzione L'indice secondario ad albero sull'attributo ISBN comporta non meno di 3 accessi al disco, in media (se è ben bilanciato). Infatti log 100 10 6 = 3. Quindi non conviene usarle tale indice, ma seguire comunque la strategia precedente.
6
Interpretando il fan-out come valore massimo di ogni nodo (F) e non come valore medio, osserviamo che un fattore di riempimento dei nodi (in termini di valori di chiave) inferiore all'80% comporta un numero medio di accessi più vicino a 4 che a 3, e il ragionamento è valido a fortiori. Del resto le strutture hash sono "imbattibili" per gli accessi mirati, mentre gli alberi B+ sono "imbattibili" per le query su intervalli e simili.
7
Su una tabella R(A,B,C,D,E) con 10.000.000 di tuple, sono definiti 3 indici: Idx1(A,C,D), Idx2(B,C,E) e Idx3(B,D,A), in cui il valore di chiave di ogni indice è composto in ordine dagli attributi indicati da sinistra a destra. Gli attributi A, B, C, D, E presentano una distribuzione uniforme di valori, con il seguente numero di valori distinti: val(A)=1000, val(B)=100, val(C)=1000, val(D)=2000, val(E)=10. | R | = 10.000.000 Idx1(A,C,D), Idx2(B,C,E), Idx3(B,D,A) val(A)=1000, val(B)=100, val(C)=1000, val(D)=2000, val(E)=10 Indicare quale indice converrà usare per eseguire la seguente query SQL (argomentando molto brevemente la risposta): select * from R where B=k1 and C=k2 and D=k3 and E=k4 Esercizio
8
Soluzione Dovendo valutare le quattro condizioni in and, si sceglie l’indice che offre, per gli attributi citati nei predicati, il maggior indice di selettività, scartando subito Idx1 perché inizia con un attributo che non è utilizzato dai predicati presenti nella condizione: Idx2: 10.000.000/(100x1000x10) = 10 tuple in media da scandire Idx3: 10.000.000/(100x2000) = 50 tuple in media da scandire Quindi conviene usare l’indice Idx2
9
9 Esercizio Si realizzi un albero B+ con F=3 (numero di valori di chiave presenti in ogni nodo) per rappresentare i valori: limone, cipresso, ciliegio, tasso, melo, agrifoglio, acero, fico, pittosphoro, cotoneaster, noce, oleandro, agave, euforbia, dracena. Si mostri poi come potrebbe avvenire un inserimento che richieda lo split di un nodo. Si costruisca anche un albero B (ottimizzato) per gli stessi valori. Requisito: tutti i nodi (tranne la radice) siano riempiti per almeno la metà (almeno la metà dei puntatori di ogni nodo siano diversi da NULL)
10
10 Il primo pensiero è di riempire l’albero in modo sequenziale. Però un nodo intermedio risulta sparso (ha 3 NULL) ATTENZIONE! I puntatori puntano ai NODI, non agli specifici valori!!. Quelli tratteggiati puntano alle tuple “fisiche”, e sono solo sulle foglie (B+). I puntatori a NULL non sono rappresentati AGRAGAACE FICEUFDRA TASPITOLE LIMDRACIL CIPCIL COTMELLIM NOC
11
11 I due nodi intermedi possono essere più “bilanciati”, avendo rispettivamente due e tre puntatori diversi da NULL Ora tutti i nodi tranne la radice sono “non sparsi” AGRAGAACE FICEUFDRA TASPITOLE LIM OLE DRACIL CIPCIL COTMELLIM NOC
12
12 AGRAGAACE COTCIPCIL FICEUFDRA Consideriamo ora l’inserimento del valore “betulla”: dovrebbe posizionarsi nel primo nodo foglia, che però è saturo e si “splitta” in due nodi (entrambi non sparsi). DRACIL AGAACE COTCIPCIL FICEUFDRA CILAGR BETAGR
13
13 Costruiamo infine il B-tree, notando 15 = 3*(4+1) Anche i nodi non-foglia hanno puntatori alle tuple fisiche, poiché nessun valore è replicato. TASPITOLE MELLIMFIC DRACOTCIP AGRAGAACE CIL EUF NOC I nodi foglia non hanno puntatori ad altri nodi dell’indice, perché sarebbero tutti a NULL, ma solo alle tuple (un dettaglio non menzionato nel libro).
14
Esercizio Si deve dimensionare un archivio gestito con tecnica hashing relativo a 1.500.000 record ciascuno di lunghezza 150byte. Sia 8MByte la dimensione di un blocco fisico, e si supponga che lo spazio utile all’interno del blocco per la memorizzazione dei dati sia l’80%. Indicare la dimensione dell’archivio che consenta una gestione efficiente degli accessi, e esprimente il vostro ragionamento. Discutere poi pregi e difetti di questa soluzione rispetto ad un B+ tree costruito sugli stessi dati.
15
Soluzione 1.500.000*150*(1/0.8)=281 MByte 281M/8M=31MBlocchi
16
Esercizio Si ha una tabella Pubblicazioni, che ha come chiave primaria l'attributo CodPubbl e come chiave candidata l'attributo ISBN. La tabella contiene 10 6 tuple ed è memorizzata tramite un'organizzazione fisica hash che utilizza l'attributo CodPubbl come chiave e presenta un livello di riempimento dell'80% (si hanno in media 10 tuple per blocco, quindi il numero di accessi medi è pari a 1.11). Trascurando l'impatto dei meccanismi di caching e quantificando solamente il numero di operazioni di lettura su disco, valutare il costo di esecuzione della seguente query: select * from Pubblicazioni where ISBN = '001122345' and (CodPubbl = 'ABC123' or CodPubbl = 'DEF456') È inoltre presente una struttura ad albero come indice secondario sull'attributo ISBN, con fan out medio pari a 100. Trascurando anche in questo caso il contributo dei meccanismi di caching, valutare il numero medio di letture necessario per eseguire la query precedente, motivando la risposta.
17
Esercizio Si consideri il seguente frammento di schema di una base di dati relazionale: LIBRO (Titolo, Autore, Anno, NomeEditore) EDITORE(NomeEditore, Via, Città) e si supponga che siano stati definiti tre indici di tipo B+ sugli attributi Titolo, Libro.NomeEditore e Editore.NomeEditore. Si vuole eseguire la seguente interrogazione: SELECT Titolo, Autore,NomeEditore,Citta FROM LIBRO L JOIN EDITORE E ON L. NomeEditore =E. NomeEditore WHERE Titolo LIKE ‘C%’ Si spieghi, motivando opportunamente la risposta, quali tipi di tecniche si possono applicare a questa interrogazione per eseguirla in modo efficiente. Si spieghi in dettaglio come si applicano tali tecniche a tale interrogazione (5 punti).
18
Esercizio Due tabelle Studente(Matr,Nome,DataNascita) e ElaboratoDB(Codice,Matr,Voto) sono memorizzate con una struttura fisica hash, usando la stessa funzione H applicata all'attributo di join Matr. Ciascuna tabella è memorizzata in 1000 blocchi del disco e per la tabella Studente è disponibile un indice secondario B-tree sull'attributo Nome. Si considerino ora le due query SQL: "select Nome,Voto from Studente S join ElaboratoDB E on S.Matr=E.Matr" "select Voto from Studente S join ElaboratoDB E on S.Matr=E.Matr where Nome = 'Carlo Ceravoli‘” Proporre un piano efficiente e stimare il numero di operazioni di lettura da disco richieste per l'esecuzione di ciascuna query.
19
Esercizio Si ha una tabella che occupa 1000 blocchi consecutivi di disco se rappresentata in modalità sequenziale. Si supponga che: il posizionamento della testina all'inizio di un blocco in modalità di accesso casuale vale sempre 10 ms; il tempo di posizionamento della testina in modalità sequenziale è nullo; la lettura di un blocco una volta che la testina è posizionata all'inizio del blocco richiede 0,5 ms. Si considerino 4 alternative di organizzazione fisica: sequenziale seriale (entry-sequenced); sequenziale ordinata; hash; albero key- sequenced (F=10). Si costruisca una tabella che presenti una stima del tempo richiesto per (1) scandire l'intera tabella e (2) per cercare una tupla caratterizzata da uno specifico valore di chiave.
20
Esercizio Si hanno due tabelle STUDENTE(Matr,Nome,Altro) ESAME(Matr,CodCorso,Data,Voto). Si deve gestire la query select S.* from Studente S join Esame E on (S.Matr = E.Matr). Si supponga che entrambe le tabelle siano organizzate a livello fisico in modo sequenziale seriale e sia presente per ciascuna tabella un indice B+ con fanout pari a 50. Vi sono 100.000 tuple su 10.000 blocchi in STUDENTE, 1.000.000 di tuple su 10.000 blocchi in ESAME. Trascurando l’effetto dei meccanismi di caching, stimare il numero di accessi richiesti per realizzare la query utilizzando i seguenti operatori: 1) nested loop con STUDENTE come tabella esterna; 2) nested loop con ESAME come tabella interna; 3) merge-scan utilizzando i due indici. Quale sarebbe il numero di accessi richiesto per il join merge-scan se entrambe le tabelle fossero organizzate in modo key-sequenced sui due indici sopra citati?
21
Esercizio Si ha una tabella Studente( Matr, Nome, Cognome, DataNascita) con 10.000 tuple in 1.000 blocchi, organizzata con un indice primario sulla matricola con fanout medio pari a 50 e un indice secondario con fanout medio pari a 30 sul cognome. Si ha quindi la seguente query: select * from Studente where Cognome like "Pa%" and Matr between "080115" and "080213“ Valutare il numero di operazioni di lettura di blocco richieste per il calcolo della query, confrontando le due strategie in cui si parte dall'applicazione della selezione rispettivamente prima sul cognome o prima sulla matricola, tenendo conto che la selettività della condizione sul cognome è pari all'1%, mentre la selettività sulla matricola è pari allo 0.2%
22
Esercizio Descrivere sinteticamente i metodi di join "nested loop", "merge scan" e "hash based" e indicare per ciascuno di essi un contesto che ne renda favorevole la applicazione.
23
Esercizio Descrivere i metodi di join merge-scan e nested-loop; illustrare in quali condizioni è conveniente usarli, facendo riferimento (in situazioni di costo standard) alla presenza di indici, al costo di sorting, e alle dimensioni delle tabelle. Discutere poi cosa succederebbe se si potesse assumere di avere buffer illimitati e costi di CPU nulli.
24
Esercizio Spiegare perché la probabilità di conflitto cresce col diminuire del fattore di blocco di un archivio gestito col metodo ad hashing. Mostrare poi un caso in cui, con fattore di riempimento all’80%, la probabilità di conflitto sia molto alta e uno in cui sia molto bassa.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.