1 / 22

Indexes à Arbres et Indexes à Hachage

Indexes à Arbres et Indexes à Hachage. Sections sélectionnées du Chapitre 10. Introduction. Rappel des 3 alternatives d’entrées des données k* : un enregistrement de données avec une valeur de clé k une paire < k , rid> une paire < k , liste de rids>

halima
Download Presentation

Indexes à Arbres et Indexes à Hachage

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Indexes à Arbres et Indexes à Hachage Sections sélectionnées du Chapitre 10

  2. Introduction • Rappel des 3 alternatives d’entrées des données k*: • un enregistrement de données avec une valeur de clé k • une paire <k, rid> • une paire <k, liste de rids> • Les indexes à arbres supportent à la fois la recherche des plages de valeurs (‘’range search’’) ainsi que les recherches d’egalités (‘’equality search’’). • ISAM: structure statique;B+ tree: dynamique, s’ajuste gracieusement aux insertions et effacements. • Indexes à Hachage : meilleurs pour les recherches d’égalité; ne peuvent supporter les recherches des valeurs des plages.

  3. Intuition Derrière les Indexes à Arbres • ``Trouvez tous les étudiants avec un gpa > 3.0’’ • Si les données sont stockées dans un fichier trié, faire la recherche binaire pour trouver le premier de ces étudiants, et de là faire un scannage pour trouver les autres. • Le coût de la recherche binaire peut être prohibitif ! Il est en effet proportionnel au # de pages puisées. • Solution: Créer un fichier d’indexes Fichier d’indexes kN k2 k1 Page N Fichier de données Page 3 Page 1 Page 2 • Une recherche binaire est faisable sur de petits fichiers d’indexes!

  4. Page de débordement Entrée d’index ISAM P K P K P P K m 0 1 2 1 m 2 • Le fichier d’indexes peut être très large. On peut cependant appliquer l’idée de fichier d’indexes de manière répétée! Pages internes Pages feuilles Pages primaires • Les pages feuilles contiennent les entrées des données.

  5. ISAM (Suite) Pages de données Pages des indexes • Création du fichier: les feuilles (pages de données) sont allouées séquentiellement et triées selon la clé de recherche; ensuite les pages de débordement sont crées. • Entrées d’indexes: <valeur de la clé, page id>; orientent la recherche vers les entrées de données se trouvant dans les pages feuilles. • Recherche: Commence à la racine; compare des clés pour aller vers la feuille appropriée. Coût: log F N ; F = # entrées/pg index, N = # feuilles • Insertion: Trouver la feuille à la quelle appartient l’entrée de donnée et l’y mettre. • Effacement: Trouver et enlever l’entrée de la feuille; désaffecter une page de débordement vide. Pages de débordement • Structure statique: les changements n’affectent que les feuilles.

  6. Racine 40 20 33 51 63 46* 55* 10* 15* 20* 27* 33* 37* 40* 51* 97* 63* Exemple d’un Arbre ISAM • Chaque nœud peut contenir 2 entrées; il n’y a pas besoin de pointeurs liant les pages entre elles (Pourquoi ???)

  7. Après l’Insertion de 23*, 48*, 41*, 42* ... Racine 40 Pages de l’index 20 33 51 63 Feuilles primaires 46* 55* 10* 15* 20* 27* 33* 37* 40* 51* 97* 63* 41* 48* 23* Pages de débordement 42*

  8. ... Ensuite Effacement de 42*, 51*, 97* Racine 40 20 33 51 63 46* 55* 10* 15* 20* 27* 33* 37* 40* 63* 41* 48* 23* • Notez que 51* apparaît au niveau de la page de l’index, mais pas dans la feuille!

  9. Entrées de l’index (orientent la recherche) Entrées de données ("Sequence set") Arbre B+: L’Index le plus Usuel • Insertion/effacement avec coût log F N; Garde la hauteur balancée. (F = ‘’fanout’’, N = # feuilles) • Taux d’occupation minimum de 50%(sauf pour la racine). Chaque nœud contient d <= m <= 2d entrées. Le paramètre d est appelé l’ordre de l’arbre. • Supporte efficacement les recherches des plages de valeurs et les recherches d’égalités.

  10. Exemple d’Arbre B+ • La recherche commence à la racine et les comparaisons des clés l’orientent vers une page (similaire à la méthode ISAM). • Recherchez 5*, 15*, …, toutes les entrées de données >= 24*, ... Racine 30 13 17 24 39* 3* 5* 19* 20* 22* 24* 27* 38* 2* 7* 14* 16* 29* 33* 34*

  11. Arbre B+ en Pratique • Ordre typique: 100. Remplissage typique: 67%. • Sortance (‘’fanout’’) moyenne = 133 • Capacités typiques: • Hauteur 4: 1334 = 312,900,700 enreg.’s • Hauteur 3: 1333 = 2,352,637 enreg.’s • Les niveaux supérieurs de l’arbre peuvent souvent tenir en mémoire principale (‘’buffer pool’’): • Niveau 1 = 1 page = 8 Kbytes • Niveau 2 = 133 pages = 1 Mbyte • Niveau 3 = 17,689 pages = 133 MBytes

  12. Insertion d’une Entrée de Données • Trouver la feuille appropriée L. • Mettre l’entrée de données dans L. • Si L a assez d’espace, fin! • Sinon, on doit partagerL (en L et un nouveau nœud L2) • Redistribuer les entrées de manière égale, copier la clé du milieu vers le haut. • Insérer l’entrée d’index pointant vers L2 dans le parent de L. • Ceci peut arriver de manière récursive • Pour partager nœud d’index, redistribuer les entrées de manière égale, mais pousser la clé du milieu vers le haut. (Contrastez ceci avec le partage des feuilles !!) • Les partages font croître l’arbre; le partage de la racine augmente sa hauteur. • Croissance de l’arbre: devient plus large ou d’ un niveau plus élevé à la racine.

  13. Entrée à insérer dans le nœud parent. (17 est poussé vers le haut et 17 5 13 24 30 Insertion de 8* dans l’Exemple Entrée à insérer dans le nœud parent. • Veuillez noter la différence entre copier vers le hautet pousser vers le haut. (Pourquoi fait-on cette différence????) (Notez que 5 est copié vers le haut et 5 continue d’apparaître dans la feuille.) 3* 5* 2* 7* 8* n’apparaît qu’une fois dans l’index.

  14. Exemple d’Arbre B+ Après l’Insertion de 8* Racine 17 24 5 13 30 39* 2* 3* 5* 7* 8* 19* 20* 22* 24* 27* 38* 29* 33* 34* 14* 16* • La racine a été partagée; d’où augmentation de la hauteur. • En fait, nous pouvons redistribuer ici au lieu de partager; cependant cela n’est pas usuel dans la pratique.

  15. Effacement d’une Entrée de Données • Commencer à la racine, trouver la feuille L à laquelle l’entrée appartient. • Enlever l’entrée. • Si L est au moins à moitié vide, fin! • Sinon L a seulement d-1 entrées, • Essayer de redistribuer, empruntant des cousins. • Sinon, fusionnerL et un cousin. • Si une fusion a lieu, on doit effacer l’entrée (d’indexe) pointant (vers L ou le cousin) à partir du parent de L. • La fusion peut se répercuter jusqu’à la racine, décroissant ainsi la hauteur de l’arbre.

  16. Notre Arbre Après l’Insertion de 8*, Suivie de l’Effacement de 19* et 20* ... • Effacer 19* est facile. • Effacer 20* est fait via une redistribution. Noter comment la clé du milieu est copiée vers le haut après la redistribution. Racine 17 27 5 13 30 39* 2* 3* 5* 7* 8* 22* 24* 27* 29* 38* 33* 34* 14* 16*

  17. ... Et Ensuite Après l’Effacement de 24* • On doit fusionner. • A droite, on fait un `changement’ d’entrée d’index. • Ci bas, on `tire une entrée d’index vers le bas’. 30 39* 22* 27* 38* 29* 33* 34* Racine 5 13 17 30 3* 39* 2* 5* 7* 8* 22* 38* 27* 33* 34* 14* 16* 29*

  18. 2* 3* 5* 7* 8* 39* 17* 18* 38* 20* 21* 22* 27* 29* 33* 34* 14* 16* Exemple de Redistribution Interne • A l’opposé du cas précédant, ici on peut redistribuer une entrée de l’enfant gauche de la racine vers l’enfant droit. Racine 22 30 17 20 5 13

  19. Après la Redistribution • Intuitivement, les entrées sont redistribuées en `poussant l’entrée partageante vers ’ le noeud parent. • Il suffit de redistribuer l’entrée d’index avec clé 20; on a aussi redistribué 17 pour illustration. Root 17 22 30 5 13 20 2* 3* 5* 7* 8* 39* 17* 18* 38* 20* 21* 22* 27* 29* 33* 34* 14* 16*

  20. 3* 6* 9* 10* 11* 12* 13* 23* 31* 36* 38* 41* 44* 4* 20* 22* 35* Chargement en Vrac d’un Arbre B+ • Si l’on a une large collection d’enreg.’s et que l’on veut créer un indexe à arbre B+ avec une clé donnée, le faire enregistrement par enregistrement est très inefficace. • Solution: ‘’Bulk Loading’’ (chargement en vrac). • Initialisation: • Trier toutes les entrées de données et les diviser en page; • créer une page racine vide; et • insérer un pointeur de la racine vers la 1ère page des données. Pages d’entrées de données triées; non encore mises dans l’arbre B+ Racine

  21. Chargement en Vrac (Suite) Racine 10 20 • Les entrées d’index pour les feuilles sont toujours créées dans la page d’index la plus à droite située juste au dessus du niveau des feuilles. Si cette dernière est pleine, elle est partagée. (Ce processus peut se répéter récursivement Pages de données 6 12 23 35 à mettre sur l’arbre 3* 6* 9* 10* 11* 12* 13* 23* 31* 36* 38* 41* 44* 4* 20* 22* 35* Racine 20 10 35 6 23 12 38 3* 6* 9* 10* 11* 12* 13* 23* 31* 36* 38* 41* 44* 4* 20* 22* 35*

  22. Résumé • Index en arbre: ISAM, arbres B+ • ISAM est une structure statique • Seules les feuilles sont modifiées; pages de débordement nécessaires • Défaut: chaînes de débordements • Arbres B+ est une structure dynamique. • Insertion et effacement laissent l’arbre balancé • coût de log F N • Pas de chaînes de débordement • Chargement en vrac des arbres B+

More Related