Title: Mati
1Matière Sélectionnée Triage Externe, Join à
Hachage,
- Chapitres 1315 13.113.5, 14.4,
2Pourquoi 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 lindex à arbre B
- Élimination des duplicatas dans une collection
denregistrements - Algorithme de Sort-merge join
- Problème commun trier des données trop larges
pour tenir en mémoire
3Merge 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
Mémoire principale
Disque
Disque
4Merge Sort à 2 Voies Algorithme
- proc two-way_extsort(file)
- // Trier un fichier sur disque en utilisant 3
pages tampons - // Passage 0 produit des runs dune 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 quil ne reste quun seul run
- While de runs à la fin du passage précédent gt
1 do - //Traiter les passages i1,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 dentré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
5Merge Sort Externe à 2 Voies
Fichier
6,2
2
3,4
9,4
8,7
5,6
3,1
- A chaque passage on lit et écrit chaque page du
fichier gt 2N I/Os par passage. - N pages dans le fichier gt de passages.
- Doù le coût total est
-
- Idee Divide et impera trier des sousfichiers
et fusionner. - Dans lexemple, le fichier dentrée contient 7
pages les pages noires montrent ce qui se
passerait avec 8 pages.
PASSAGE 0
runs de 1page
1,3
2
3,4
5,6
2,6
4,9
7,8
PASSAGE 1
4,7
1,3
2,3
runs de 2 pages
8,9
5,6
2
4,6
PASSAGE 2
2,3
4,4
1,2
runs de 4 pages
6,7
3,5
6
8,9
PASSAGE 3
1,2
2,3
3,4
runs de 8 pages
4,5
6,6
7,8
9
6Merge Sort Externe Général
- Coment utiliser plus de 3 pages tampon ?
- Pour trier un fichier avec N pages en utilisant B
pages tampon - Passage 0 utiliser B pages tampon. Produit
runs triés de B pages chacune. - Passage 2, , etc. fusionner B-1 runs.
ENTREE 1
. . .
. . .
ENTREE 2
. . .
SORTIE
ENTREE B-1
Disque
Disque
B tampons en mémoire
7Merge 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 quil ne reste quun seul run
- While de runs à la fin du passage précédent gt
1 do - //Traiter les passages i1,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 dentré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
8Coût du Merge Sort Externe
- Nombre de passages
- Coût 2N ( de passages)
- P.ex., avec 5 pages tampon, trier un fichier de
108 pages - Passage 0 22 runs triés de 5
pages chacune (le dernier nayant que 3 pages) - Passage 1 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
9Nombre de Passages du Triage Externe
10I/O pour le Merge Sort Externe
- de plus longs runs signifient souvent moins de
passages! - Les algorithmes présentés font des I/O dune 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 denreg.s de la
taille de 100 bytes en 15 minutes.
11Nombre de Passages du Triage Optimisé
- Taille des Blocs 32, le passage initial
produit des runs de 2B.
12Double Tampons
- Afin de réduire le temps dattente 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
SORTIE
ENTREE 2'
SORTIE'
b
Taille de bloc
Disque
ENTREE k
Disque
ENTREE k'
B tampons en mémoire, fusion à k voies
13Utilisation 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 lordre en
traversant les feuilles de lindexe. - Est-ce une bonne idée ?
- Cas à considérer
- Lindex B est groupé Bonne idée!
- Lindex B est non groupé Pourrait être une
très mauvaise idée!
14Index 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 lalternative 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!
15Index B Nongroupé Utilisé pour Trier
- Alternative (2) pour les entrées des données
chaque entrée contient le rid dun enregistrement
des données. En général, un I/O par
enregistrement des données!
Index
Entrées des données
Données
16Hash Join Idée
- Deux phases partition et vérification
(matching) - Partition Repartir les deux relations R et S en
utilisant la même fonction de hachage h les
tuples de R dans la partition i de R ne peuvent
être joints que avec ceux de la partition i de S.
Suppositions faites - Le de pages tampon est B 1 pour entrée et 1
pour sortie - Le de partitions est k
- Le de pages tampon utilisé par les partitions
est B-2 - Hacher R et S sur les colonnes de join i et j
- Matching Lire une partition Ri de R en mémoire
et ensuite la hacher en utilisant une fonction de
hachage h2 (différente de h). Scanner la
partition Si de S pour rechercher les tuples
correspondants aux tuples de Ri (en utilisant h2
pour vérifier la table de hachage de Ri).
17Hash Join Algorithme
- // Calculer le join de deux relations R et S sur
les colonnes Ri et Sj. - // Repartir R en k partitions
- foreach tuple r de R do
- lire r et lajouter à la page tampon h(ri)
// Forcer cette page vers le disque au
// fur et à mesure quelle
se remplit - // Repartir S en k partitions
- foreach tuple s of S do
- lire s et lajouter à la page tampon h(sj)
// Forcer cette page vers le disque au
// fur et à mesure quelle
se remplit - //Phase de vérification (Probing/matching)
- for l1, , k do
- //Construire une table de hachage en
mémoire pour Rl, utilisant h2 - foreach tuple r de Rl do
- lire r et linsérer dans la table de
hachage de Rl utilisant h2(ri) - // Scanner les tuples de Sl et vérifier les
tuples correspondants à r dans Rl - foreach tuple s de Sl do
- lire s et vérifier la table de hachage de
Rl en utilisant h2(sj) - pour tout tuple correspondant r dans Rl, sortir
ltr,sgt - réinitialiser la table de hachage pour préparer
la prochaine partition
18Ré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 gt 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. - Les algorithmes de join sont cruciaux en
pratique. Le hash join est largement supporté par
les SGBDs.