Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMonique Beauséjour Modifié depuis plus de 9 années
1
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Matière Sélectionnée: Triage Externe, Join à Hachage, … Chapitres 13—15: 13.1—13.5, 14.4, …
2
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke2 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 Sort-merge join Problème commun: trier des données trop larges pour tenir en mémoire
3
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke3 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke4 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke5 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. D’où le coût total est: 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. 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke6 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke7 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
8
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke8 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 n’ayant 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke9 Nombre de Passages du Triage Externe
10
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke10 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.
11
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke11 Nombre de Passages du Triage Optimisé * Taille des Blocs = 32, le passage initial produit des runs de 2B.
12
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke12 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. 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
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke13 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!
14
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke14 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. * Toujours meilleur que le triage externe ! (Oriente la recherche) Enregistrements des données Index Entrees des donnees ("Sequence set")
15
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke15 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! Données Index Entrées des données
16
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke16 Hash 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 ).
17
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke17 Hash 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 l’ajouter à la page tampon h(ri); // Forcer cette page vers le disque au // fur et à mesure qu’elle se remplit // Repartir S en k partitions foreach tuple s of S do: lire s et l’ajouter à la page tampon h(sj); // Forcer cette page vers le disque au // fur et à mesure qu’elle se remplit //Phase de vérification (‘’Probing’’/’’matching’’) for l=1, …, k do : //Construire une table de hachage en mémoire pour Rl, utilisant h2 foreach tuple r de Rl do: lire r et l’insé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 S l do : lire s et vérifier la table de hachage de Rl en utilisant h2(sj); pour tout tuple correspondant r dans Rl, sortir ; réinitialiser la table de hachage pour préparer la prochaine partition;
18
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke18 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. Les algorithmes de join sont cruciaux en pratique. Le hash join est largement supporté par les SGBDs.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.