1 Tri Externe Chapitre 13:
2 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 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
3 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 Mémoire principale ENTREE 1 ENTREE 2 SORTIE Disque
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 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 > 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 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
5 Merge Sort Externe à 2 Voies A chaque passage on lit et écrit chaque page du fichier => 2N I/Os par passage. N pages dans le fichier => # 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. Fichier runs de 1page runs de 2 pages runs de 4 pages runs de 8 pages PASSAGE 0 PASSAGE 1 PASSAGE 2 PASSAGE 3 9 3,4 6,2 9,48,75,63,1 2 3,45,62,64,97,8 1,32 2,3 4,6 4,7 8,9 1,3 5,62 2,3 4,4 6,7 8,9 1,2 3,5 6 1,2 2,3 3,4 4,5 6,6 7,8
6 Merge 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. B tampons en mémoire ENTREE 1 ENTREE B-1 SORTIE Disque ENTREE 2...
7 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 quil ne reste quun 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 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
8 Coû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
9 Nombre de Passages du Triage Externe
10 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 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.
11 Nombre de Passages du Triage Optimisé * Taille des Blocs = 32, le passage initial produit des runs de 2B.
12 Double 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. SORTIE SORTIE' Disque ENTREE 1 ENTREE k ENTREE 2 ENTREE 1' ENTREE 2' ENTREE k' Taille de bloc b B tampons en mémoire, fusion à k voies
13 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 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!
14 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 lalternative 2 est utilisée? Coût additionnel de puiser les enreg.s des données: chaque page puisée juste une fois. * Toujours meilleur que le triage externe ! (Oriente la recherche) Enregistrements des données Index Entrees des donnees ("Sequence set")
15 Index 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! Données Index Entrées des données
16 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.