Ordinare i dati: Sort

L’azione di sort dei dati non e un operatore dell’algebra ma risulta molto utile per risolvere alcune situazioni tra cui query ORDER BY, bulk loading degli indici e operatori di JOIN e GROUP BY.

Gli algoritmi di sort possono essere suddivisi in base alla memoria in cui vengono svolti:

algoritmi di sort internialgoritmi di sort esterni
eseguiti in memoria centrale, con prestazioni molto buoneeseguiti usando la memoria secondaria di appoggio

Merge sort esterno

Il concetto alla base di questo sistema di sorting e caricare i dati in memoria centrale in sequenze (dette run), ordinarle con un merge interno e poi eseguire il merge una per volta

flowchart LR
A[(pages in datafile)]
subgraph internal memory
B((internal sort))
C[run]
D[run]
F((merge))
end
A --> B --> C  -->F  
B --> D <--> F

il primo passo di ordinamento utilizza un sort interno

Nella fase di fusione vengono usati 3 buffer (uno per l’output) dove vengono caricati in input le pagine delle run e mergiate nella pagina di output

Merge sort esterno: performance

dato un numero di pagine in input il numero di passi dell’algoritmo di sort merge e con un costo totale (in numero di letture scritture) . Con e tempo di I/O si ha un costo di minuti

direi non il massimo…

Migliorando il sort merge: sort merge a z vie

Un possibile miglioramento consiste nell’utilizzare buffers (uno sempre per l’output) nella fase di merge, aumentando il fan-in della fase di merge

---
title: z-vie sort merge
---
flowchart TD
A[leggi z run dal disco]
B[fondi le run sul buffer di output]
C[scrivi il buffer di output sul disco]
A --> B --> C -- ripeti per finio a che non resta una sola run --> A 

Determinare il valore di

La scelta piu immediata per determinare il valore di sarebbe farlo piu grande possibile cosi da massimizzarne il vantaggio, tuttavia questo a 2 limitazioni principali:

  • consumo di CPU, in quanto il costo di determinare il maggiore fra elementi segue
  • non vi e distinzione tra letture random e sequenziali del disco

Distinguendo tra i due tipi di letture si ha che:

Di conseguenza si possono organizzare le letture delle pagine in batches detti -frame da pagine ciascuno

Sorting con b+tree

Nel caso di ordinamento con b+tree e necessario distinguere tra le tipologie di indice

  • se l’indice e clustered il costo e dato dal numero di foglie e di pagine del file dati (costo )
  • se l’indice e un-clustered ogni record causa l’accesso al file dati (costo ), se gli attributi interessanti sono contenuti nell’indice si può evitare di accedere al file dati (costo )

PREVIOUS NEXT