ISGBD C 6 2017 2018 Aici suntem Sortarea
ISGBD C 6, 2017 -2018
Aici suntem
Sortarea externa • Motivatie ▫ ▫ ▫ Rezultate ordonate Bulk-loading a tree-index Eliminarea duplicatelor Gruparea (vezi functii de agregare) Sort-merge join ▫ Sortare in memoria interna? ▫ Divide et Impera
Sortarea externa. Two-way merge sort • Algoritm simplu, ca introducere pentru urmatorul (realistic) • Se folosesc 3 pagini din memoria interna • Tabelul = N pagini (pp 2^k) (nu incape in memoria interna) ▫ Se sorteaza folosind pasi intermediari (runde) = pass ▫ Sub-fisiere sortate sunt scrise pe disc (tmp) = run ▫ Rezultate de la pass anterior sunt combinate (merge) in runs de doua ori mari… pana cand se obtine un run de N pagini
Sortarea externa. Two-way merge sort
Sortarea externa. Two-way merge sort • Pass 0 ▫ Se citeste fisierul pagina cu pagina ▫ Continutul fiecarei pagini este sortat in memoria interna si e scris pe disc ▫ => rezultat = N = 2^k pagini sortate • Pass 1 ▫ Se citesc cate 2 runs din pass 0 ▫ Se combina inregistrarile lor folosind al treilea buffer. Cand bufferul de iesire e plin, se scrie pe disc ▫ => rezultat = 2^(k-1) runs (de cate doua pagini)
Sortarea externa. Two-way merge sort • … • Pass i ▫ Se citesc cate 2 runs din pass (i-1) (de dimensiune 2^(i-1) pagini) ▫ Se combina inregistrarile lor folosind al treilea buffer. Cand bufferul de iesire e plin, se scrie pe disc ▫ => rezultat = 2^(k-i) runs (de cate 2^i pagini)
Sortarea externa. Two-way merge sort • … • Pass k (ultimul) ▫ Se citesc 2 runs din pass (k-1) (de dimensiune 2^(k-1) pagini) ▫ Se combina inregistrarile lor folosind al treilea buffer. Cand bufferul de iesire e plin, se scrie pe disc ▫ => rezultat = UN run (de 2^k pagini)
Sortarea externa. Two-way merge sort
Sortarea externa. Two-way merge sort • Analiza ▫ In fiecare pass: 2 I/O per pagina (1 R + 1 W) ▫ Numarul de runde: ▫ Cost total: ▫ Foloseste prea putine resurse
General external merge sort • Fie fisier de N pagini • Fie B buffer-e disponibile in memoria interna • Doua modificari importante in 2 -way sort: ▫ 1) Pass 0: citeste B pagini la un moment dat in memoria interna, le sorteaza => runs sortate de cate B pagini (exceptie poate fi ultimul run, cu mai putine pagini)
General external merge sort • Modificare pass 0
General external merge sort • Doua modificari importante in 2 -way sort: ▫ 2) In rundele 1, 2… se folosesc B-1 pagini pentru input si o pagina pentru output
General external merge sort • //Pass 0: produce runs that are B pages long • Read B pages into memory, sort them, write out a run. • //Merge B-1 runs at a time to produce longer runs until only one run (containing all records of input file) is left • While the number of runs at en of previous pass is > 1 ▫ //Pass 1, 2… ▫ While there are runs to be merged from previous pass �Choose next B-1 runs (from previous pass) �Read each run into an input buffer, page at a time �Merge the runs and write to the output buffer; force output buffer to disk one page at a time.
General external merge sort • Numarul de runde: • Costul: 2 N * (nr runde) • Ex: N = 108 pagini, B = 5 buffer-e ▫ ▫ Pass 0: 22 sorted runs (5 pages + 1 of 3 pages) Pass 1: 6 sorted runs (20 pages + 1 of 8 pages) Pass 2: 2 sorted runs (80 pages + 28 pages) Pass 3: sorted file (108 pages)
General external merge sort • Ex: numarul de runde
General external merge sort • Minimizarea numarului de runde (teoretic) ▫ Pass 0: replacement sort => runs of ~2*B pages �B pagini: 1 pagina de input, 1 pagina de output, B-2 pagini pentru “current set” �Pp sortare dupa k �Se citesc B-2 pagini in current set, plus o pagina in buffer-ul de input �Se ia in mod repetat din current set inregistrarea cu cel mai mic k, mai mare sau egal cu cel mai mare k din buffer-ul de output => in locul gol se adauga o inregistrare din buffer-ul de input (pp inregistrari de aceeasi dimensiune) �Cand buffer-ul de input e gol, se citeste o noua pagina �Se obtine un run cand toate inregistrarile din current set au k mai mic decat cel mai mare k din buffer-ul de output
B+-trees for Sorting • Fie B+-tree cu cheia de cautare k • Inregistrarile din fisier se cer ordonate dupa k ▫ => se pot parcurge nodurile terminale B+-tree �Clustered (!) < external sorting �Not clustered (? ) > external sorting (in gen)
Sortare • Vezi C 7: sortare vs. hashing
- Slides: 19