CALCOLO DEL COSTO DI ACCESSO AI DATI



Documenti analoghi
CALCOLO DEL COSTO DI MODIFICA DEI DATI

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Sistemi per la gestione di database: MySQL ( )

MODULO 5 ACCESS Basi di dati. Lezione 4

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

I database relazionali (Access)

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Progettazione Fisica FILE

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

SQL - Funzioni di gruppo

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Le Basi di Dati. Le Basi di Dati

Basi Di Dati, 09/12/2003

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Informatica. Rappresentazione dei numeri Numerazione binaria

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Il linguaggio SQL: query innestate

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Organizzazione degli archivi

Operazioni sui database

Capitolo 13. Interrogare una base di dati

DBMS (Data Base Management System)

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

Dispensa di database Access

Definizione di domini

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

Compito Basi di Dati. Tempo concesso: 90 minuti 18 Gennaio 2007 Nome: Cognome: Matricola:

Facoltà di Farmacia - Corso di Informatica

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

CONCETTO DI ANNIDAMENTO

Lezione V. Aula Multimediale - sabato 29/03/2008

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Strutturazione logica dei dati: i file

Secondo Compitino di Basi di Dati

Informatica per le discipline umanistiche 2 lezione 10

Basi di Dati Complementi Esercizi. Esercizi su strutture fisiche di accesso. Soluzione Esercizio 1. Esercizio 1. Soluzione Esercizio 2.

Introduzione ai database relazionali

Esercizio sui data base "Gestione conti correnti"

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

MODELLO RELAZIONALE. Introduzione

Ricorsione in SQL-99. Introduzione. Idea di base

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Data Warehousing (DW)

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Introduzione ai Sistemi di Gestione di Basi di Dati XML

LABORATORIO EXCEL XLSTAT 2008 SCHEDE 2 e 3 VARIABILI QUANTITATIVE

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

ESEMPIO DI QUERY SUL FILE Formario_minuscolo

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Istruzioni DML di SQL

SQL/OLAP. Estensioni OLAP in SQL

Funzioni in C. Violetta Lonati

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Altri metodi di indicizzazione

DATABASE RELAZIONALI

Il concetto di valore medio in generale

ESTRAZIONE DI RADICE

Dati relazionali e XML

corso di Access MICROSOFT ACCESS Docente: Andrea Mereu Università degli studi di Cagliari 16 aprile 9 maggio 2012

Database. Si ringrazia Marco Bertini per le slides

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

I file di dati. Unità didattica D1 1

GERARCHIE RICORSIVE - SQL SERVER 2008

Organizzazione delle informazioni: Database

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

OSSIF WEB. Manuale query builder

Alessandro Pellegrini

Prova Scritta di Basi di Dati

EXCEL FUNZIONI PRINCIPALI

SPC e distribuzione normale con Access

Indici ad albero. Albero Binario di Ricerca

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Esercizio data base "Biblioteca"

Introduzione al MATLAB c Parte 2

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Introduzione all Information Retrieval

Olga Scotti. Basi di Informatica. Excel

Laboratorio di Basi di Dati e Web

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

( x) ( x) 0. Equazioni irrazionali

Basi di Dati e Microsoft Access

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Database. Francesco Tapparo Informatica e Bioinformatica /16

Le query di raggruppamento

DOCUMENT MANAGEMENT SYSTEM E VISTE UTILIZZO DEL DMS E DELLE VISTE IN AZIENDA

Capitolo TOTALI PARZIALI E COMPLESSIVI Aprire la cartella di lavoro Lezione2 e inserire la tabella n 2 nel Foglio1 che chiameremo Totali.

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Introduzione all analisi dei segnali digitali.

Comparatori. Comparatori di uguaglianza

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Codifica binaria dei numeri relativi

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Il database management system Access

CALCOLO COMBINATORIO

4 3 4 = 4 x x x 10 0 aaa

Transcript:

CALCOLO DEL COSTO DI ACCESSO AI DATI costo di accesso 1 Nelle lezioni precedenti Avete visto: i le basi di dati relazionali ed il linguaggio SQL la struttura dei files gli indici B + tree questa è dedicata al calcolo del costo di accesso ai dati (tuple) costo di accesso 2

scopo: scopo della lezione valutare quale sia la migliore strategia di accesso per interrogazioni SQL sia su singola relazione sia nel caso di join i criteri di valutazione servono anche a prendere decisioni sull ordinamento delle relazioni e quali indici costruire costo di accesso 3 ottimizzatori I criteri che vedremo sono in linea con i metodi e le scelte utilizzati dai query-optimizer dei DBMS relazionali lo scopo dei query-optimizer è infatti valutare quale sia la migliore strategia di accesso (access path) per le interrogazioni SQL degli utenti gli ottimizzatori non prendono decisioni sull ordinamento delle relazioni e su quali indici costruire queste decisioni sono lasciate al DBA che deve valutare sulla base del carico di lavoro costo di accesso 4

decisioni quali indici? index scan relation scan Relazione di NT tuple in NB blocchi (pagine) costo di accesso 5 utilizzo degli indici Un indice può essere utilizzato per eseguire una interrogazione SQL se l attributo su cui è costruito: compare nella clausola WHERE è contenuto in un FATTORE BOOLEANO il fattore booleano è ARGOMENTO DI RICERCA attraverso indice compare in un ORDER BY o GROUP BY costo di accesso 6

utilizzo degli indici Esempi: per la relazione IMPIEGATI ( matr, cognome, nome, lavoro, qualifica, salario, straordinario, dno) 1) la query: SELECT cognome, salario FROM impiegati WHERE dno = 51 AND salario > 2000 AND (lavoro = fattorino OR lavoro = guardiano ) oppure. costo di accesso 7 utilizzo degli indici 2) la query: SELECT cognome, salario FROM impiegati WHERE dno = 51 AND salario + straordinario > 3000 AND (lavoro = fattorino OR qualifica = 7) costo di accesso 8

utilizzo degli indici Separazione della condizione WHERE in fattori booleani: un predicato è un fattore boleano se è collegato alla radice del WHERE-tree da AND (query 1) AND AND dno = 51 salario > 2000 lavoro = fattorino OR lavoro = guardiano costo di accesso 9 utilizzo degli indici un predicato è un fattore boleano se con risultato falso determina il risultato falso per la query AND AND (query 2) dno = 51 salario + straordinario > 3000 lavoro = fattorino OR qualifica = 7 costo di accesso 10

utilizzo degli indici 1) per la query 1 sono fatt. bool. argomenti di ricerca: dno = 51, salario > 2000 (lavoro = fattorino OR lavoro = guardiano ) dno salario lavoro costo di accesso 11 utilizzo degli indici 2) per la query 2 è fatt. bool. argomento di ricerca solo: dno = 51 per (lavoro = fattorino OR qualifica = 7) se il DBMS può usare più indici per una query: lavoro + qualifica si può effettuare l unione delle liste di TID costo di accesso 12

utilizzo degli indici 2) per la query 2 è non è fatt. bool. argomento di ricerca: salario + straordinario > 3000 sia che il DBMS possa usare più indici per una query che uno solo : salario straordinario??? non si può effettuare l unione delle liste di TID costo di accesso 13 utilizzo degli indici per una query sono argomento di ricerca i predicati del tipo: attributo. comparatore. valore, ad es.: dno = 47 (<, < =,> =, >, between) SI dno = $D (variabile di programma) SI dno = 47 OR dno = 32 SI (IN corrisponde ad OR ma non sempre è SI) (dno = 47) OR (qualifica = 3) SI/NO salario + straordinario > 3000 NO salario = straordinario (stessa relazione) NO costo di accesso 14

modello di costo Un indice è utile per una query solo se il costo di accesso con l indice è < costo dell accesso sequenziale cioè < NB ( NB/2 se attributo unique) il modello comunemente utilizzato (ce ne sono di molto più sofisticati e precisi) serve per previsioni di massima e si basa su: per la relazione : NT, NB per ogni indice :NL (numero di foglie) per ogni attributo :NK (cardinalità), max, min tutti valori desumibili dai cataloghi dei DBMS le grandezze sono uniformemente distribuite costo di accesso 15 selettività Un predicato è selettivo se ci si aspetta che non tutte le tuple lo soddisfino fattore di selettività (filtro) F di un predicato : frazione di tuple che soddisfano il predicato nt / NT = valori selezionati / NK = SK / NK A = valore F = 1 / NK A dno = 24 F dno = 1/ Nk dno, default = 1/10 A IN (val1, val2, val3 ) F = 3 / NK A dno IN ( 24, 36) F dno = 2/ NK dno analogamente per dno = 24 OR dno = 36 in generale F= numero valori/ NK A, default = 1/2 costo di accesso 16

selettività A > valore F = SK / NK A, default f=1/3 voto > 27 F voto = 4/ 15 se i voti vanno da 17 a 31 e supponendo che tutti siano stati assegnati almeno una volta per salario > 2000 (range la cui cardinalità non è controllabile) si può prendere: F salario = (max(sal) - 2000) / (max(sal) - min(sal)) analogamente per BETWEEN 2000 AND 3500 F salario = (3500-2000) / (max(sal) - min(sal)) default f=1/4 costo di accesso 17 selettività Predicati su attributi diversi pred1 OR pred2 : F = F pred1 +F pred2 -F pred1 F pred2 attributo A = attributo B F = 1 / max(nk A, NK B ) se i due domini sono sovrapposti, altrimenti F=0 - negazione : A = not valore F = 1-1 / NK A per ottenere maggiori precisioni molti sistemi memorizzano istogrammi semplificati costo di accesso 18

selettività Numero di tuple del risultato: E = NT F pred1 e nell ipotesi di assenza di correlazione tra i valori degli attributi, per più predicati: E = NT Π i F predi - l ipotesi non è sempre verificata, bisognerebbe rilevare un fattore di correlazione o di clustering relativo tra valori di attributi differenti:. tipo di lavoro, data di nascita: incorrelati. qualifica, dipartimento: correlati costo di accesso 19 costo di accesso I casi esaminati si differenziano a seconda che: indice clustered / unclustered attributo unique / con ripetizione dei valori predicato di uguaglianza / di range / OR uso di un solo indice / più indici costo di accesso 20

Ipotesi di buffer Si considera, per ogni relazione o indice, che ogni cambio di riferimento a pagina referenzi una pagina fuori dal buffer di memoria centrale. E come se ogni relazione (o indice ) avesse una sola pagina di buffer in memoria centrale. E un ipotesi pessimistica che tende a calcolare upper bounds. costo di accesso 21 costo di accesso Il costo C è dato dalla somma : C indice + C relazione costo di accesso 22

costo di accesso indice clustered / unclustered su attributo unique con predicato di uguaglianza: esempio, matr = 236 (sulla relazione impiegati) foglia indice Costo = 1 foglia + 1 blocco = 2 blocco dati se l indice è clustered o unclustered è lo stesso costo di accesso 23 costo di accesso indice clustered con E > 1: matr between 236 and 312, lavoro = guardiano Costo = F NL + F NB costo di accesso 24

costo di accesso indice unclustered / clustered : lavoro = guardiano Costo = ( F NL + F NT ) con F = F valore analogamente per il caso clustered Costo = ( F NL + F NB ) costo di accesso 25 costo di accesso indice unclustered / clustered (predicato OR): lavoro = guardiano OR portiere Costo = 2 ( F NL + F NT ) sono 2 accessi distinti, analogamente per il caso clustered Costo = 2 ( F NL + F NB ) con F = F valore costo di accesso 26

costo di accesso Uso di più indici unclustered con E > 1: intersezione /unione dei TID estratti dagli indici matr between 236 and 312, lavoro = guardiano Costo = Σ k F k NL k + Π k F k NT costo di accesso 27 costo di accesso Costo = Σ k F k NL k + Π k F k NT Questa formula è molto imprecisa perché presuppone la mancanza di correlazione tra attributi Questo metodo può essere migliorato aggiungendo indici k solo se portano un vantaggio di selettività al secondo termine superiore allo svantaggio introdotto nella sommatoria del primo costo di accesso 28

Esempio: costo di accesso SELECT * FROM IMPIEGATI WHERE lavoro = fattorino AND salario < 1500 con NT = 10000, NB = 1000, NK sal = 100 NK lav = 50 indici: clustered su salario con NL = 160 unclustered su lavoro con NL = 100 supponiamo che la selettività sia. F lav = 1 / 50 = 0.02 F sal = (1500 - min) / (max- min) = 0.1 costo di accesso 29 costo di accesso costo delle scansione sequenziale: C seq = 1000 costo dell indice su lavoro (unclust.): C lav = F lav NL lav + F lav NT = 0.02 100 + 0.02 10000 = 2 + 200 = 202 costo dell indice su salario (clust): C sal = F sal NL sal + F sal NB = 0.1 160 + 0.1 1000 = 16 +100 = 116 C seq > C lav >C sal costo di accesso 30

costo di accesso scambiamo adesso l ordinamento per gli indici: costo dell indice su lavoro (clust.): C lav = F lav NL lav + F lav NB = 0.02 100 + 0.02 1000 = 2 + 20 = 22 costo dell indice su salario (unclust): C sal = F sal NL sal + F sal NT = 0.1 160 + 0.1 10000 = 16 +1000 = 1016 C sal >C seq >C lav costo di accesso 31 costo di accesso tuple del risultato: E = F lav F sal NT = 20 la scelta migliore per la query è avere un ordinamento su lavoro e un indice su lavoro, mentre l indice su salario non deve essere costruito il miglioramento che si ottiene rispetto all assenza di indici e ordinamenti ò di 1 a 45 nel caso in cui l ordinamento su salario sia di utilità per altre query l indice unclustered su lavoro porta ad un miglioramento di 1 a 9 costo di accesso 32

uso degli indici Miglioramento della formula di costo nel caso di ordinamento dei TIDs valore array di E tids ordinati 1 2 NB RELAZIONE Quindi in generale si ha C relazione min(e, NB). costo di accesso 33 cardenas C relazione puo' essere calcolato meglio usando la formula di CARDENAS (Comm. ACM 1975): Φ (k,n) = n (1-(1-1/n) k ) C relazione = Φ (E,NB) = NB (1-(1-1/NB) E ) La formula e' valida sotto le seguenti ipotesi: a) tutti i record sono equiprobabili, b) tutti i blocchi contengono lo stesso numero di tuple, c) come conseguenza di a) e b) tutti i blocchi sono equiprobabili. costo di accesso 34

cardenas Φ(E,NB) può essere ricavata come segue: 1/NB è la probabilità che un blocco contenga una data tupla estratta dagli E, 1-1/NB è la probabilità che un blocco non contenga una data tupla estratta dagli E (1-1/NB) E è la probabilità che un blocco non contenga nessuna delle E tuple 1-(1-1/NB) E è la probabilità che un blocco contenga almeno una delle E tuple e quindi venga visitato, NB (1-(1-1/NB) E ) è il numero di blocchi che ci si aspetta contengano almeno una tupla costo di accesso 35 andamento di Φ L'andamento generale della Φ è riportato in figura: NB min(e,nb) cardenas E costo di accesso 36

andamento di Φ Tabella con NB = 100 La formula di Cardenas calcola in ogni caso il numero Φ di blocchi visitati (con qualsiasi successione). Il numero di accessi C relazione è calcolabile con la formula di Cardenas solo se i TIDs sono in ordine. E Φ 10 10 20 18 30 26 40 33 50 39 60 45 70 51 80 55 90 60 100 63 150 78 200 87 250 95 300 95 500 99 costo di accesso 37 utilizzo degli indici Caso di indice unclustered "localmente ordinato" : con i TIDs in ordine crescente per ogni valore della chiave... chiave + tids a b foglie indice..... a.. b... a.. b... b.. a... a.. b... n-ple costo di accesso 38

utilizzo degli indici Predicato : Col = valore C = F col NL + Φ(E,NB) dove E = F col NT Predicato di tipo : valore 1< Col < valore2 C = F col NL + K Φ(E/K,NB) dove K = F col NK costo di accesso 39 utilizzo degli indici Rivediamo i calcoli con Φ per l esercizio precedente con indici unclustered: predicato: lavoro = fattorino C = F lav NL lav + Φ(E,NB) dove E lav = F lav NT =200 C = F lav NL lav + Φ(200,1000) = 2 + 182 = 184 (era 202) costo di accesso 40

utilizzo degli indici Predicato : salario < 1500 C = F sal NL sal + K Φ(E sal /K,NB) dove K = F sal NK sal E sal /K = f sal NT dove f sal è il filtro per 1 valore di salario E sal /K = f sal NT = 10000/100 = 100 C = 16 + 10 Φ(100,1000) = = 16 + 952 = 968 (era 1016) costo di accesso 41 utilizzo degli indici Esempio: variazione con K NL = 1. 800, NR = 1. 000. 000, NK = 100. 000, NB = 100. 000 6 5 4 Costi ( x 100000 ) con indice 3 2 1 0 scan sequenziale 1 10 100 1000 10000 100000 K costo di accesso 42

utilizzo degli indici Le tuple del risultato vengono poi controllate con i predicati residui: SELECT * FROM IMPIEGATI WHERE lavoro = fattorino AND età < 35 AND salario + straordinario >3 predicato residuo La selettività dei predicati residui è difficile da calcolare costo di accesso 43 uso degli indici Perché non mettere indici su tutti gli attributi? Il query optimizer potrebbe poi scegliere. Gli indici devono essere mantenuti: caso DELETE: eliminazione di TID Costo = N ind E (N ind : numero indici E = E 2) costo di accesso 44

uso degli indici caso UPDATE: spostamento di TID Costo = N ind 2 E (N ind : numero indici E = E 2) Un numero indici troppo elevato comporta un eccessivo costo di modifica della relazione costo di accesso 45 rif. biblio.: Antonio Albano: Costruire sistemi per basi di dati. Addison Wesley 2001 contenuti: strutture files struttura DBMS recovery e concorrenza ottimizzatori DDBMS riferimenti: oracle, sybase, informix, DB2, SQl server costo di accesso 46

alcuni rif. biblio.: Validità di Φ: P.Ciaccia, D.Maio, P.Tiberio: "A unifying approach to evaluating block accesses in data base organizations." Information Proc. Lett., vol 28, no. 5, 1988. UPDATE: calcolo dei costi M.Schkolnick, P.Tiberio: "Estimating the cost of updates in a relational database". ACM Transactions on Database Systems, vol 10, 2, 1985. Calcolo dei costi e scelta degli indici: R.Bonanno, D.Maio, P.Tiberio: "An approximation algorithm for secondary index selection in relational database physical design". The Computer Journal, vol. 28, 4, 1985. S.Finkelstein, M.Schkolnick, P.Tiberio: "Physical database design for relational databases". ACM Transactions on Database Systems, marzo 1988. costo di accesso 47 La proiezione: proiezione SELECT DISTINCT A, C FROM REL Si ottiene costruendo un file con solo <A, C>, facendo il sort del file e poi eliminando gli uguali (oppure costruendo un indice multicolonna su A,C) Il costo sarà: C pj = NB + NB AC +C sort (NB AC ) + NB AC + N pj (bisogna calcolare la cardinalità della proiezione E pj e il numero di pagine che contengono il risultato N pj <NB AC <NB) costo di accesso 48

proiezione Le tuple risultato della proiezione sono distinte: SELECT DISTINCT A, C FROM REL Un calcolo approssimato del numero di tuple del risultato è il seguente: se NT sono le tuple di REL, NK A e NK C le cardinalità di A e C, NK A NK C sono le possibili coppie (a,c) di valori distinti, quindi E A,C è calcolabile con la formula di Cardenas: E A,C = Φ( NT, NK A NK C ) costo di accesso 49 proiezione Nel caso di query con selezione e proiezione: SELECT DISTINCT C FROM REL WHERE B = 10 NT/ NK B sono le tuple di REL che soddisfano il predicato, ciascuna di queste può assumere uno dei NK C valori di C, quindi E C è calcolabile con la formula di Cardenas: E C = Φ( NT/NK B,NK C ) costo di accesso 50

uso degli indici Gli indici servono per il controllo di unicità della chiave primaria. Gli indici clustered possono servire per l inserimento di tuple: se c è l indice clustered, seguendo l indice, alcuni DBMS cercano di inserire la nuova tupla in modo da mantenere l ordine, se non c è spazio nella pagina appropriata allora la tupla va in overflow; periodicamente la relazione viene riordinata e gli indici ricostruiti. in altri sistemi le nuove tuple vengono sempre aggiunte di seguito alle altre, degradando l ordinamento; periodicamente la relazione viene riordinata e gli indici ricostruiti. costo di accesso 51 METODI PER IL CALCOLO DEL NUMERO DI VALORI DISTINTI IN UN ATTRIBUTO DI UN FILE Se la colonna ha un indice, i valori distinti vengono contati con esattezza. Se non c è l indice il conteggio comporta un tempo di calcolo paragonabile alla costruzione di un indice (bisogna costruirlo o fare la proiezione). In entrambi i casi il calcolo va effettuato per ogni colonna SI PUO' USARE UN CONTEGGIO STATISTICO APPROSSIMATO costo di accesso 52

CONTEGGIO STATISTICO APPROSSIMATO Si predispone un buffer di lunghezza fissa con n posizioni di m bytes. Si sceglie una funzione hash per trasformare la chiave in m bytes. Si predispone una maschera di m*8 bits inizialmente tutti a 0 (ad esempio). Si leggono tutti i valori della chiave, si trasformano con la funzione hash e si inseriscono nel buffer se non già presenti. Quando il buffer si riempie si escludono tutti i valori che contengono un valore diverso da quello della maschera nel bit meno significativo; ciò consente di eliminare circa la metà dei valori presenti. costo di accesso 53 CONTEGGIO STATISTICO APPROSSIMATO L algoritmo riparte non facendo entrare nel buffer i valori con il 1 0 bit diverso da quello della maschera mentre fa entrare tutti gli altri. Quando nuovamente il buffer è pieno si eliminano i valori che hanno il 2 0 bit diverso da quello della maschera. etc.. Algoritmo: si predispone un buffer b vuoto per n valori di m bytes; si sceglie la funzione hash per trasformare ciscun valore in m bytes. costo di accesso 54

CONTEGGIO STATISTICO APPROSSIMATO mult 1, nvalb 0 repeat leggi il prossimo record VH hash (valore nella colonna) IF mult > 1 THEN escludi VH se dalla maschera per i valori da mult-1 ad 1; IF VH non è già in b THEN inserisci vh in b, nvalb nvalb +1; IF b e' pieno THEN si escludono da b tutti i valori il cui bit in posizione mult e' dal corrispondente bit della maschera, si compatta b e si conta nvalb, mult mult+1; until fine del file nval nvalb * 2 mult -1. nvalb mult nval : valori diversi contenuti nel buffer, : fattore moltiplicativo, : stima del numero di valori diversi. costo di accesso 55 CONTEGGIO STATISTICO APPROSSIMATO FILE CAMPO MASCHERA mult BUFFER se il buffer e' pieno allora scarta i valori e modifica mult v valore HASH? scartato scartato se gia' nel buffer costo di accesso 56

CONTEGGIO STATISTICO APPROSSIMATO La funzione hash è essenziale perché agisce da randomizzatore dei valori e rende giustificata l'ipotesi che ad ogni riempimento del buffer il controllo del valore 0/1 effettivamente elimini metà dei valori. Questo metodo può commettere in qualche caso errori grandi ma mediamente l'errore è, confinato tra il 10% ed il 5%. la stima è sufficiente per i calcoli di prima approssimazione. Un errore è anche introdotto dal fatto che le funzioni hash non sono perfette ma introducono collisioni per valori diversi. costo di accesso 57 Metodo linear counting Date N tuple, calcolare gli nval valori diversi contenuti in una colonna. La funzione hash questa volta pone ad 1 un bit in un array di m bit (con m molto grande). Alla fine del processo si conta il numero di zeri nz nell'array che rapportato ad m dà : p = nz/m = (1-1/m) nval ( 1/m è la probabilità che uno degli m bits corrisnda ad uno degli nval valori, 1-1/m è la prob. che il bit non corrisponda ad uno degli nval valori, p è la prob. che il bit non corrisponda ad alcuno degli nval valori) il numero di valori distinti è : nval = log e p/ log e (1-1/m) costo di accesso 58

Metodo linear counting colonna FILE valori HASH 001.. 1..0100.. 1 10000..10.. 1 bit array costo di accesso 59 Metodo linear counting Criteri di scelta di m: si usa una tabella N m 100 80 Esistono tabelle 200 106 precalcolate 500 172 che dato N 1000 268 dicono quanto 5000 948 deve essere 10000 1709 la dimensione m 50000 6909 del bit array per 100000 12744 avere un errore 500000 53848 minore del 10%. 1000000 100880 10000000 831809 50000000 3699768 costo di accesso 60

Metodo linear counting algoritmo linear counting inizializza la bitarray a 0 repeat leggi una tupla; vh hash(valore); bitarray [vh] 1; until fine del file nz numero di 0 in bitarray; nval log e p/ log e (1-1/m) p nz/m costo di accesso 61