Tri Externe Chapitre 13: 13.1—13.5 Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver les étudiants en.
Download
Report
Transcript Tri Externe Chapitre 13: 13.1—13.5 Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver les étudiants en.
Tri Externe
Chapitre 13: 13.1—13.5
1
Pourquoi Trier?
Problème classique en informatique (Voir Knuth, v.3)!
Données requises en ordre trié
P.ex.: Trouver les étudiants en ordre croissant de gpa
Chargement en vrac de l’index à arbre B+
Élimination des duplicatas dans une collection
d’enregistrements
Algorithme de merge-sort join (jointure à tri-fusion)
Problème commun: trier des données trop larges pour
tenir en mémoire
2
Merge Sort à 2 Voies: Requiert 3 Tampons
Passage 1: Lire une page, la trier (en mémoire),
l’écrire sur disque.
seulement une page tampon utilisée
Passage 2, 3, …, etc.:
trois pages tampon utilisées
ENTREE 1
SORTIE
ENTREE 2
Disque
Mémoire principale
Disque
3
Merge Sort Externe à 2 Voies
A chaque passage on lit et
écrit chaque page du fichier
=> 2N I/O’s par passage.
N pages dans le fichier =>
# de passages
log2 N 1
D’où le coût total est:
6,2
9,4
8,7
5,6
3,1
2
3,4
2,6
4,9
7,8
5,6
1,3
2
Fichier
PASSAGE 0
runs de 1page
PASSAGE 1
4,7
8,9
2,3
4,6
1,3
5,6
2
runs de 2 pages
PASSAGE 2
2,3
2 N log 2 N 1
3,4
Idee: Divide et impera: trier
des sousfichiers et fusionner.
Dans l’exemple, le fichier
d’entrée contient 7 pages; les
pages noires montrent ce qui
se passerait avec 8 pages.
4,4
6,7
8,9
1,2
3,5
6
runs de 4 pages
PASSAGE 3
1,2
2,3
3,4
4,5
6,6
7,8
9
runs de 8 pages
4
Merge Sort à 2 Voies: Algorithme
proc two-way_extsort(file)
// Trier un fichier sur disque en utilisant 3 pages tampons
// Passage 0: produit des runs d’une page
Lire chaque page du fichier dans la mémoire, le trier et l’écrire.
//Fusionner des paires de runs pour produire de plus long runs
// jusqu’à ce qu’il ne reste qu’un seul run
While # de runs à la fin du passage précédent > 1 do:
//Traiter les passages i=1,2,…
While il y a des runs à fusionner issus du passage précédent do:
Prendre les 2 runs suivants du passage précèdent.
Lire chaque run dans un tampon d’entrée, 1 page à la fois.
Fusionner les runs et écrire le résultat dans le tampon de sortie en
forçant le contenu de ce tampon vers le disque page par page.
endproc
5
Merge Sort Externe Général
Comment utiliser plus de 3 tampons?
Pour trier un fichier avec N pages en utilisant B
pages tampon:
Passage 0: utiliser B pages tampon. Produit N / B runs
triés de B pages chacune.
Passage 2, …, etc.: fusionner B-1 runs.
ENTREE 1
...
ENTREE 2
...
SORTIE
...
ENTREE B-1
Disque
B tampons en mémoire
Disque
6
Merge Sort Externe Général: Algorithme
proc two-way_extsort(file)
// Trier un fichier sur disque en utilisant B pages tampons
// Passage 0: produit des runs de B pages
Lire B pages du fichier dans la mémoire, les trier et les écrire.
//Fusionner B-1 runs pour produire de plus long runs
// jusqu’à ce qu’il ne reste qu’un seul run
While # de runs à la fin du passage précédent > 1 do:
//Traiter les passages i=1,2,…
While il y a des runs à fusionner issus du passage précédent do:
Prendre les B-1 runs suivants du passage précèdent.
Lire chaque run dans un tampon d’entrée, 1 page à la fois.
Fusionner les runs et écrire le résultat dans le tampon de sortie en
forçant le contenu de ce tampon vers le disque page par page.
endproc
7
Coût du Merge Sort Externe
Nombre de passages: 1 log B 1 N / B
Coût = 2N * (# de passages)
P.ex., avec 5 pages tampon, trier un fichier de 108
pages:
Passage 0: 108 / 5 = 22 runs triés de 5 pages chacune
(le dernier n’ayant que 3 pages)
Passage 1: 22 / 4 = 6 runs triés de 20 pages chacune (le
dernier avec seulement 8 pages)
Passage 2: 2 runs triés, 80 pages et 28 pages
Passage 3: fichier trié de 108 pages
8
Nombre de Passages du Triage Externe
B=3 B=5
4
7
100
5
10
1,000
7
13
10,000
9
17
100,000
10
20
1,000,000
12
23
10,000,000
14
26
100,000,000
15
1,000,000,000 30
N
B=9
3
4
5
6
7
8
9
10
B=17 B=129 B=257
1
1
2
2
2
3
2
2
4
3
3
5
3
3
5
3
4
6
4
4
7
4
5
8
9
I/O pour le Merge Sort Externe
… de plus longs runs signifient souvent moins de
passages!
Les algorithmes présentés font des I/O d’une page à
la fois.
En pratique, on lit un bloc de pages sequentiellement!
Suggestion: les tampons devraient contenir des blocs
de pages et non des pages individuelles.
En pratique, la plupart des fichiers sont triés en 2-3 passages.
Des DBMSs typiques trient 1M d’enreg.’s de la taille de 100
bytes en 15 minutes.
10
Nombre de Passages du Triage Optimisé
N
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
B=1,000
1
1
2
3
3
4
5
5
B=5,000
1
1
2
2
2
3
3
4
B=10,000
1
1
1
2
2
3
3
3
* Taille des Blocs = 32, le passage initial produit des runs de 2B.
11
Double Tampons
Afin de réduire le temps d’attente pour que
une requête I/O soit complétée, on peut
prélire les données dans un bloc de réserve.
Potentiellement, plus de passages sont possibles;
en pratique, la plupart des fichiers sont toujours
triés en 2-3 passages.
ENTREE 1
ENTREE 1'
ENTREE 2
ENTREE 2'
SORTIE
SORTIE'
b
Disque
ENTREE k
Taille de bloc
Disque
ENTREE k'
B tampons en mémoire, fusion à k voies
12
Utilisation des Arbres B+ pour Trier
Scénario: La table à trier a un indexe à arbre B+ sur
les colonnes de triages.
Idée: Puiser les enregistrements dans l’ordre en
traversant les feuilles de l’indexe.
Est-ce une bonne idée ?
Cas à considérer:
L’index B+ est groupé: Bonne idée!
L’index B+ est non groupé: Pourrait être une très
mauvaise idée!
13
Index B+ Groupé Utilisé pour Trier
Coût: partir de la racine à la
feuille la plus à gauche et de
là traverser toutes les pages
feuilles (Alternative 1)
Si l’alternative 2 est utilisée?
Coût additionnel de puiser les
enreg.’s des données: chaque
page puisée juste une fois.
Index
(Oriente la recherche)
Entrees
des donnees
("Sequence set")
Enregistrements des données
* Toujours meilleur que le triage externe!
14
Index B+ Nongroupé Utilisé pour Trier
Alternative (2) pour les entrées des données;
chaque entrée contient le rid d’un
enregistrement des données. En général, un
I/O par enregistrement des données!
Index
Entrées des données
Données
15
Résumé
Le triage externe est important; un SGBD peut dédier une
partie de la réserve des pages tampon juste pour cette
tâche!
Le merge sort externe minimalise les coûts des entrées et
sorties vers le disque:
Passage 0: Produit des runs triés de taille B (# de page tampon). Les
passages suivants sont des runs de fusion.
Le # de runs fusionnés à la fois dépend de B et de la taille du bloc.
Bloc de large taille => petit # de runs à fusionner.
Les index à arbre B+ groupé sont bons pour le triage
externe; les index nongroupés sont généralement très
mauvais.
16