proiezione

L’operatore di proiezione consente di eliminare attributi dal risultato di una query, data una query del tipo:

SELECT DISTINCT R.sid, R.vid
FROM Recensioni R

E necessario eliminare gli attributi non richiesti e eliminare i record duplicati, ci sono 3 approcci principali

Proiettare ordinando

Una possibile soluzione e quella di sfruttare l’ordinamento, si procede come segue

  • si legge il file rimuovendo gli attributi non richiesti
  • si ordina per mezzo del merge sort
  • si eliminano i duplicati

costo complessivo dato da

si possono squashare la rimozione degli attributi con la fase di sorting e l'eliminazione dei duplicati nella fase di merging del merge sort

Proiettare usando hashing

Fattibile solo se si hanno un alto numero di pagine, il processo si divide in due fasi

Fase di partizionamento

  • si leggono le pagine del buffer e si eliminano gli attributi
  • si applica una funzione di hash (a valori) per suddividere le tuple in base agli attributi rimasti
  • se una pagina e piena la si scrive nel disco
flowchart LR
A[(input file)]
subgraph central memory
B[pagina input]
C[1]
D[2]
E[...]
F[B-1]
end
G[(partizioni)]
A --> B --> C & D & E & F --> G

Fase di eliminazione dei duplicati

si leggono in sequenza i file generati e si applica una nuova funzione hash (diversa dalla prima ) e si redistribuiscono i record nelle pagine e si eliminano i duplicati

l'ipotesi è che nella seconda fase non si debbano salvare le pagine su disco, di conseguenza il numero di pagine del file di input deve essere minore di

in caso sia necessario scrivere su disco si può ripetere il processo con una terza funzione di hash

Sorting vs hashing

La tecnica basata su sorting risulta migliore nel caso in cui i valori risultino sbilanciati o ci siano molte tuple da eliminare

con il sorting il risultato e anche ordinato :)

Proiettare con un indice

Questa modalità necessita che tutte le chiavi da restituire in output siano contenuti nell’indice, le tecniche sono le precedenti ma si attuano sull’indice e non sul file dati

in caso di indice b+tree se gli attributi sono un prefisso della chiave basta scandire le foglie eliminando i duplicati con costo

PREVIOUS NEXT