CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati...

31
costo di accesso 1 CALCOLO DEL COSTO DI ACCESSO AI DATI costo di accesso 2 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)

Transcript of CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati...

Page 1: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 1

CALCOLODEL COSTODI ACCESSO

AI DATI

costo di accesso 2

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)

Page 2: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 3

scopo della lezione• scopo:

– 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 4

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 indicicostruire

• queste decisioni sono lasciate al DBA che deve valutare sulla base del carico di lavoro

Page 3: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 5

decisioni

relation scan

index scan

quali indici?

Relazione di NT tuple in NB blocchi (pagine)

costo di accesso 6

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

Page 4: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 7

utilizzo degli indici• Esempi: per la relazioneIMPIEGATI ( matr, cognome, nome, lavoro,

qualifica, salario, straordinario, dno)1) la query: SELECT cognome, salario

FROM impiegatiWHERE dno = 51AND salario > 2000AND (lavoro = ‘fattorino’

OR lavoro = ’guardiano’)oppure ….

costo di accesso 8

utilizzo degli indici2) la query: SELECT cognome, salario

FROM impiegatiWHERE dno = 51AND salario + straordinario > 3000AND (lavoro = ‘fattorino’

OR qualifica = 7)

Page 5: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 9

utilizzo degli indiciSeparazione della condizione WHERE in fattori booleani: un predicato è un fattore boleanose è collegato alla radice del WHERE-tree da AND

ANDAND

ORdno = 51salario > 2000

lavoro = ‘fattorino’ lavoro = ‘guardiano’

(query 1)

costo di accesso 10

utilizzo degli indiciun predicato è un fattore boleano se con risultato falso determina il risultato falso per la query

AND AND

ORdno = 51 salario +straordinario

> 3000

lavoro = ‘fattorino’ qualifica = 7

(query 2)

Page 6: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 11

utilizzo degli indici1) per la query 1 sono fatt. bool. argomenti di

ricerca: dno = 51 , salario > 2000(lavoro = ‘fattorino’ OR lavoro = ’guardiano’)

dno lavorosalario

costo di accesso 12

utilizzo degli indici2) per la query 2 è fatt. bool. argomento di ricerca

solo: dno = 51per (lavoro = ‘fattorino’ OR qualifica = 7) se il DBMS può usare più indici per una query:

qualificalavoro

si può effettuare l’unione delle liste di TID

+

Page 7: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 13

utilizzo degli indici2) per la query 2 è non è fatt. bool. argomento di

ricerca: salario + straordinario > 3000sia che il DBMS possa usare più indici per una query che uno solo :

straordinariosalario

non si può effettuare l’unione delle liste di TID

?? ?

costo di accesso 14

utilizzo degli indiciper una query sono argomento di ricerca i predicati del tipo: attributo . comparatore. valore,ad es.:dno = 47 (<, < = ,> = , > , between) SIdno = $D (variabile di programma) SIdno = 47 OR dno = 32 SI(IN corrisponde ad OR ma non sempre è SI) (dno = 47) OR (qualifica = 3) SI/NO salario + straordinario > 3000 NOsalario = straordinario (stessa relazione) NO

Page 8: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 15

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 16

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 predicatont / NT = valori selezionati / NK = SK / NK

–A = valore F = 1 / NKAdno = 24 Fdno = 1/ Nkdno , default = 1/10

–A IN (val1, val2, val3 ) F = 3 / NKAdno IN ( 24, 36) Fdno = 2/ NKdnoanalogamente per dno = 24 OR dno = 36

in generale F= numero valori/ NKA , default = 1/2

Page 9: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 17

selettività• A > valore F = SK / NKA , default f=1/3

voto > 27 Fvoto = 4/ 15se i voti vanno da 17 a 31 e supponendo che tutti siano stati assegnati almeno una voltaper salario > 2000 (range la cui cardinalità non è controllabile) si può prendere:Fsalario = (max(sal) - 2000) / (max(sal) - min(sal)) analogamente per BETWEEN 2000 AND 3500 Fsalario = (3500 - 2000) / (max(sal) - min(sal)) default f=1/4

costo di accesso 18

selettività• Predicati su attributi diversi– pred1 OR pred2 :

F = Fpred1 + Fpred2 - Fpred1 Fpred2– attributo A = attributo B

F = 1 / max(NKA, NKB)se i due domini sono sovrapposti, altrimenti F=0

- negazione : A = not valoreF = 1-1 / NKA

per ottenere maggiori precisioni molti sistemi memorizzano istogrammi semplificati

Page 10: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 19

selettività• Numero di tuple del risultato:

– E = NT × Fpred1 e –nell’ipotesi di assenza di correlazione tra i

valori degli attributi, per più predicati:E = NT × ΠiFpredi

- 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 20

costo di accessoI 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

Page 11: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 21

Ipotesi di bufferSi 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 22

costo di accessoIl costo C è dato dalla somma :

Cindice + Crelazione

Page 12: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 23

costo di accesso• indice clustered / unclustered su attributo

unique con predicato di uguaglianza:esempio, matr = 236 (sulla relazione impiegati)

fogliaindice

bloccodati

Costo = 1 foglia + 1 blocco = 2

se l’indice è clustered o unclustered è lo stesso

costo di accesso 24

costo di accesso• indice clustered con E > 1:

matr between 236 and 312, lavoro = ‘guardiano’

Costo = F × NL + F × NB

Page 13: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 25

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 26

costo di accesso• indice unclustered / clustered (predicato OR):

lavoro = guardiano OR portiere

Costo = 2 × (F × NL + F × NT ) con F = F valoresono 2 accessi distinti,analogamente per il caso clustered

Costo = 2 × (F × NL + F × NB )

Page 14: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 27

costo di accesso• Uso di più indici unclustered con E > 1:

intersezione /unione dei TID estratti dagli indicimatr between 236 and 312, lavoro = guardiano

Costo = ΣkF k × NL k + Πk F k × NT

costo di accesso 28

costo di accessoCosto = ΣkF 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

Page 15: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 29

costo di accessoEsempio:

SELECT * FROM IMPIEGATIWHERE lavoro = ‘fattorino’ AND salario < 1500con NT = 10000, NB = 1000,

NKsal = 100 NKlav = 50

indici: clustered su salario con NL = 160unclustered su lavoro con NL = 100

supponiamo che la selettività sia.Flav = 1 / 50 = 0.02Fsal = (1500 - min) / (max- min) = 0.1

costo di accesso 30

costo di accessocosto delle scansione sequenziale:Cseq = 1000

costo dell’indice su lavoro (unclust.):Clav = Flav × NLlav + Flav × NT =

0.02 × 100 + 0.02 × 10000 = 2 + 200 = 202

costo dell’indice su salario (clust):Csal = Fsal × NLsal + Fsal × NB =

0.1 × 160 + 0.1 × 1000 = 16 +100 = 116Cseq > Clav > Csal

Page 16: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 31

costo di accessoscambiamo adesso l’ordinamento per gli indici:

costo dell’indice su lavoro (clust.):Clav = Flav × NLlav + Flav × NB =

0.02 × 100 + 0.02 × 1000 = 2 + 20 = 22

costo dell’indice su salario (unclust):Csal = Fsal × NLsal + Fsal × NT =

0.1 × 160 + 0.1 × 10000 = 16 +1000 = 1016 Csal > Cseq > Clav

costo di accesso 32

costo di accessotuple del risultato:

E = Flav × Fsal× 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

Page 17: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 33

uso degli indiciMiglioramento della formula di costo nel caso di ordinamento dei TIDs

Quindi in generale si ha Crelazione ≤ min(E, NB).

tids ordinati

RELAZIONE1 2 NB

array di Evalore

costo di accesso 34

cardenasCrelazione puo' essere calcolato meglio usando la

formula di CARDENAS (Comm. ACM 1975):

Φ (k,n) = n × (1-(1-1/n)k)

Crelazione = Φ (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.

Page 18: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 35

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 36

andamento di ΦL'andamento generale della Φ è riportato in figura:

cardenas

NB

E

min(E,NB)

Page 19: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 37

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 Crelazioneè calcolabile con la formula diCardenas solo se i TIDs sono in ordine.

10 1020 1830 2640 33 50 39 60 45 70 51 80 55 90 60 100 63 150 78200 87250 95300 95500 99

E Φ

costo di accesso 38

utilizzo degli indiciCaso di indice unclustered "localmente ordinato" : con i TIDs in ordine crescente per ogni valore della chiave

a b

a b a a a bbb.. .. ... .. ... .. ... .. ...

.........foglieindice

n-ple

chiave + tids

Page 20: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 39

utilizzo degli indici• Predicato : Col = valore

C = Fcol × NL + Φ(E,NB)dove E = Fcol × NT

• Predicato di tipo : valore 1< Col < valore2

C = Fcol × NL + K × Φ(E/K,NB)dove K = Fcol × NK

costo di accesso 40

utilizzo degli indici• Rivediamo i calcoli con Φ per l’esercizio

precedente con indici unclustered:

predicato: lavoro = ‘fattorino’

C = Flav × NLlav + Φ(E,NB)dove Elav = Flav × NT =200

C = Flav × NLlav + Φ(200,1000)= 2 + 182 = 184 (era 202)

Page 21: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 41

utilizzo degli indici• Predicato : salario < 1500

C = Fsal × NLsal + K × Φ(Esal/K,NB)dove K = Fsal × NKsalEsal /K = fsal × NT dove fsal è il filtro per 1 valore di salarioEsal /K = fsal × NT = 10000/100 = 100 C = 16 + 10 × Φ(100,1000) =

= 16 + 952 = 968 (era 1016)

costo di accesso 42

utilizzo degli indiciEsempio: variazione con KNL = 1.800, NR = 1.000.000, NK = 100.000, NB = 100.000

0

1

2

3

4

5

6

1 10 100 1000 10000 100000

( x 100000 )

Costi

K

con indice

scan sequenziale

Page 22: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 43

utilizzo degli indici• Le tuple del risultato vengono poi controllate

con i predicati residui:

SELECT * FROM IMPIEGATIWHERE lavoro = ‘fattorino’ AND età < 35 AND salario + straordinario >3

predicato residuo

La selettività dei predicati residui è difficile da calcolare

costo di accesso 44

uso degli indici• Perché non mettere indici su tutti gli attributi?

Il query optimizer potrebbe poi scegliere.• Gli indici devono essere mantenuti:

Costo = Nind × E’ (Nind : numero indiciE’ = E × 2)

caso DELETE: eliminazione di TID

Page 23: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 45

uso degli indici

Costo = Nind × 2 × E’ (Nind: numero indiciE’ = E × 2)

caso UPDATE: spostamento di TID

Un numero indici troppo elevato comporta un eccessivo costo di modifica della relazione

costo di accesso 46

rif. biblio.:Antonio Albano: “Costruire sistemi per basi di dati”.Addison Wesley 2001contenuti:

strutture files

struttura DBMS

recovery e concorrenza

ottimizzatori

DDBMS

riferimenti: oracle, sybase, informix, DB2, SQl server

Page 24: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 47

alcuni rif. biblio.:Validità di Φ:P.Ciaccia, D.Maio, P.Tiberio: "A unifying approach to evaluatingblock accesses in data base organizations." Information Proc. Lett.,vol 28, no. 5, 1988.

UPDATE: calcolo dei costiM.Schkolnick, P.Tiberio: "Estimating the cost of updates in arelational database". ACM Transactions on Database Systems, vol10, 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 designfor relational databases". ACM Transactions on Database Systems, marzo 1988.

costo di accesso 48

proiezione• La 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à:Cpj= NB + NBAC + Csort (NBAC) + NBAC + Npj

(bisogna calcolare la cardinalità della proiezione Epj e il numero di pagine che contengono il risultato Npj <NBAC <NB)

Page 25: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 49

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, NKA e NKC le cardinalità di A e C, NKA × NKC sono le possibili coppie (a,c) di valori distinti, quindi EA,C è calcolabile con la formula di Cardenas:

E A,C = Φ( NT, NKA × NKC)

costo di accesso 50

proiezione• Nel caso di query con selezione e proiezione:

SELECT DISTINCT C FROM RELWHERE B = 10

NT/ NKB sono le tuple di REL che soddisfano il predicato, ciascuna di queste può assumere uno dei NKC valori di C, quindi EC è calcolabile con la formula di Cardenas:

E C = Φ( NT/NKB , NKC)

Page 26: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 51

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 52

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

METODI PER IL CALCOLO DEL NUMERO DIVALORI DISTINTI IN UN ATTRIBUTO DI UN FILE

Page 27: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 53

CONTEGGIO STATISTICO APPROSSIMATO

Si predispone un buffer di lunghezza fissa con nposizioni di m bytes.

Si sceglie una funzione hash per trasformare la chiave in m bytes.

Si predispone una maschera di m*8 bitsinizialmente 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 54

CONTEGGIO STATISTICO APPROSSIMATO

L’ algoritmo riparte non facendo entrare nel buffer i valori con il 10 bit diverso da quello della mascheramentre fa entrare tutti gli altri.

Quando nuovamente il buffer è pieno si eliminano i valori che hanno il 20 bit diverso da quello della maschera. etc..Algoritmo:

si predispone un buffer b vuoto per n valori di mbytes; si sceglie la funzione hash per trasformare ciscunvalore in m bytes.

Page 28: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 55

CONTEGGIO STATISTICO APPROSSIMATO

mult ← 1, nvalb ← 0repeat 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 posizionemult e' ≠ dal corrispondente bit della maschera, si compatta be si conta nvalb, mult← mult+1;

until fine del filenval← nvalb * 2 mult - 1 .

nvalb : valori diversi contenuti nel buffer,mult : fattore moltiplicativo,nval : stima del numero di valori diversi.

costo di accesso 56

CONTEGGIO STATISTICO APPROSSIMATO

vvalore

HASH

scartato

MASCHERA

?

BUFFER

scartato se gia' nel buffer

se il buffer e' pienoallora scarta i valori e modifica mult

mult

FILE

CAMPO

Page 29: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 57

CONTEGGIO STATISTICO APPROSSIMATO

La funzione hash è essenziale perché agisce darandomizzatore 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 hashnon sono perfette ma introducono collisioni per valori diversi.

costo di accesso 58

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 = loge p/ loge(1-1/m)

Page 30: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 59

Metodo linear counting

FILE

colonna

valori HASH

bit array

1 1 1001.. ..0100.. 10000..10..

costo di accesso 60

Metodo linear counting

Criteri di scelta di m: si usa una tabellaN m

100 80200 106500 172

1000 2685000 948

10000 170950000 6909

100000 12744500000 53848

1000000 10088010000000 83180950000000 3699768

Esistono tabelleprecalcolate che dato Ndicono quanto deve esserela dimensione mdel bit array peravere un erroreminore del 10%.

Page 31: CALCOLO DEL COSTO DI ACCESSO AI DATI informativi/costo1_new.pdf · – i le basi di dati relazionali ed il linguaggio SQL – la struttura dei files – gli indici B+ tree • questa

costo di accesso 61

Metodo linear counting

algoritmo linear counting

inizializza la bitarray a 0repeat

leggi una tupla;vh ← hash(valore);bitarray [vh] ← 1;

until fine del file

nz ← numero di 0 in bitarray; p ← nz/mnval ← loge p/ log e(1 - 1/m)