La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Sections sélectionnées du Chapitre 11

Présentations similaires


Présentation au sujet: "Sections sélectionnées du Chapitre 11"— Transcription de la présentation:

1 Sections sélectionnées du Chapitre 11
Indexes à Hachage Sections sélectionnées du Chapitre 11 The slides for this text are organized into chapters. This lecture covers Chapter 9. Chapter 1: Introduction to Database Systems Chapter 2: The Entity-Relationship Model Chapter 3: The Relational Model Chapter 4 (Part A): Relational Algebra Chapter 4 (Part B): Relational Calculus Chapter 5: SQL: Queries, Programming, Triggers Chapter 6: Query-by-Example (QBE) Chapter 7: Storing Data: Disks and Files Chapter 8: File Organizations and Indexing Chapter 9: Tree-Structured Indexing Chapter 10: Hash-Based Indexing Chapter 11: External Sorting Chapter 12 (Part A): Evaluation of Relational Operators Chapter 12 (Part B): Evaluation of Relational Operators: Other Techniques Chapter 13: Introduction to Query Optimization Chapter 14: A Typical Relational Optimizer Chapter 15: Schema Refinement and Normal Forms Chapter 16 (Part A): Physical Database Design Chapter 16 (Part B): Database Tuning Chapter 17: Security Chapter 18: Transaction Management Overview Chapter 19: Concurrency Control Chapter 20: Crash Recovery Chapter 21: Parallel and Distributed Databases Chapter 22: Internet Databases Chapter 23: Decision Support Chapter 24: Data Mining Chapter 25: Object-Database Systems Chapter 26: Spatial Data Management Chapter 27: Deductive Databases Chapter 28: Additional Topics 1

2 Introduction Indexes à Hachage : meilleurs pour les recherches d’égalité; ne supportent pas les recherches des valeurs des plages. Hachage statique Hachage dynamique Hachage linéaire 2

3 Hachage Statique Pages primaires :
forment une collection de compartiments en nombre fixe sont affectées séquentiellement en mémoire et ne sont jamais désaffectées; pages de débordement si nécessaire h(k) mod M = compartiment où mettre l’entrée des données dont la clé est k (M = # de compartiments). h(key) mod N 2 key h N-1 Pages (compartiments) primaires Pages de débordement 3

4 Hachage Statique (Suite)
Les compartiments contiennent les entrées des données triées. La fonction de hachage utilise le champ de la clé de recherche de l’enregistrement r. Les valeurs des clés doivent être distribuées sur une plage allant de 0 à M-1. Opérations: Recherche: calculer b= h(key); chercher key dans le compartiment b et dans d’éventuelles pages de débordement si nécessaire. Insertion: calculer b= h(key); insérer key dans le compartiment b. Si la page b manque de l’espace, créer une page de débordement et y inserer key. Effacement: calculer b= h(key); chercher key dans le compartiment b et dans d’éventuelles pages de débordement si nécessaire. Effacer key et désaffecter une page de débordement si nécessaire. Défauts: le nombre de compartiments étant fixe Si le fichier grandit énormément, de longues chaînes de débordement se forment Si le fichier se rétrécit énormément, beaucoup d’espace se perd dans les compartiments Solution: hachage dynamique (Hachage extensible et hachage linéaire) 4

5 Hachage Extensible Situation: un compartiment (page primaire) se remplit. Pourrait-on réorganiser le fichier en doublant le # de compartiments? Lire tout le fichier original et réécrire ce fichier en deux fois plus de pages est très coûteux! Solution: Utiliser un répertoire de pointeurs vers les compartiments; ainsi, pour doubler le nombre de compartiments il suffit de doubler la taille du répertoire ne partager que les compartiments débordants Avantages: Le répertoire est bien plus petit que le fichier lui-même, d’où doubler le répertoire est moins coûteux. Plus besoin de pages de débordement! 5

6 Exemple Le répertoire est de taille 4.
compartiment A PROFONDEUR LOCALE 2 4* 12* 32* 16* PROFONDEUR GLOBALE compartiment B 2 2 Le répertoire est de taille 4. La capacité du compartiment est de 4 entrées de données. Recherche: pour trouver la page de r, prendre 2 bits à la fin de h(key(r)) pour obtenir un # entre 0 et 3; p.ex. Si h(key(r)) = 5 (= binaire 101), r est dans la page vers laquelle pointe 01. 00 1* 5* 21* 01 compartiment C 10 2 11 10* compartiment D 2 REPERTOIRE 15* 7* 19* PAGES DE DONNEES 6

7 Exemple (Suite) compartiment A PROFONDEUR LOCALE 2 4* 12* 32* 16* PROFONDEUR GLOBALE Insertion (page non pleine): rechercher la page de r, insérer l’entrée de données de r; p.ex. Nous voulons insérer 13* Puisque h(key(r)) = 13 (= binaire 1101), l’entrée de données de r est dans la page vers laquelle pointe 01. Insérer 13* dans le compartiment B. Insertion (page pleine): P.ex. insérer 20* dans la page A. Partager la page pleine (i.e., créer une nouvelle page et redistribuer les entrées de données). Doubler la taille du répertoire (nécessaire sous une condition à venir) compartiment B 2 2 00 1* 5* 21* 13* 01 compartiment C 10 2 11 10* compartiment D 2 REPERTOIRE 15* 7* 19* PAGES DE DONNEES 6

8 Exemple: Insertion de h(r)=20
20 = binaire Les derniers 2 bits (00) indiquent que r appartient au compartiment A qui est déjà plein! On divise A en A et A2, mais on a besoin des 3 derniers bits pour déterminer à quel compartiment appartient chaque entrée de données (les 2 derniers ne suffisent plus!): Profondeur Globale du répertoire (PG): # maximum de bits nécessaires pour décider du compartiment auquel une entrée appartient. Profondeur Locale d’un compartiment (PL): # de bits utilisés pour déterminer si une entrée appartient à ce compartiment. Nous plaçons les entrées dont le troisième bit est 1 dans A2 (4*, 12*, 20*) et ceux dont il est 0 dans A (32*, 16*). Avec PL=3, on bute au problème suivant: le répertoire ne peut stocker qu’un maximum de 4 pointeurs, alors que 5 sont nécessaires. Solution: doubler la taille du répertoire. Lorsque une insertion entraîne PL > PG., on double le répertoire par copie et réarrangement des pointeurs. 8

9 Exemple: Insertion de h(r)=20 (Suite)
3 PROFONDEUR LOCALE PROFONDEUR LOCALE comp. A 32* 16* PROFONDEUR GLOBALE 32* 16* comp. A PROFONDEUR GLOBALE 2 2 3 2 comp. B 00 1* 5* 21* 13* 000 1* 5* 21* 13* comp. B 01 001 10 2 2 010 comp. C 11 10* 011 10* comp. C 100 2 REPERTOIRE 2 101 comp. D 15* 7* 19* 15* 7* 19* 110 comp. D 111 2 3 compartiment A2 4* 12* 20* REPERTOIRE (`image' 4* 12* 20* comp. A2 du compartiment A) (`image' du comp. A) 7

10 Autres Considérations
Partager une page ne nécessite pas toujours un doublement du répertoire. P.ex. insérer 9* dans la page B. Partager la page pleine (i.e., créer une nouvelle page et redistribuer les entrées de données). Rediriger le pointeur 001 vers B (1*, 9*) et le pointeur 101 vers une nouvelle page B2 (5*,21*,13*). Ainsi donc, nous n’avons pas doublé la taille du répertoire. Effacement: Si l’effacement des données a comme effet que un compartiment (ou page) devient vide, nous pouvons le fusionner avec son image. Si chaque élément du répertoire pointe vers le même compartiment, nous pouvons réduire le répertoire de moitié. 9

11 Résumé Le hachage est approprié pour les recherches d’égalité.
Le hachage statique peut conduire à des chaines de débordement ou à du gaspillage de l’espace. Le hachage extensible évite les chaines de débordement par le partage des pages pleines. Un répertoire (qui double ou se réduit de moitié périodiquement) maintient les pages. 16


Télécharger ppt "Sections sélectionnées du Chapitre 11"

Présentations similaires


Annonces Google