Chapitre 8 Indexage et hachage Introduction Certaines requêtes n'intéressent qu'un petit sous-ensemble des enregistrements d'un fichier. Ø Ex: Rechercher tous les comptes de l'agence de Perryridge Il n'est pas question de lire la totalité du fichier Compte de haut en bas (accès séquentiel) pour retrouver l'information requise. Le système devrait être capable directement l’information requise. d’atteindre Alors, il faudra ajouter au SGBD des structures qui utilisent soit des index ou des fonctions de hachage. GPA775 Chapitre 8 - Indexage et hachage 2 Contenu Dans ce chapitre, nous allons nous intéresser aux points suivants : Ø Fichiers séquentiels indexés Ø Fichiers indexés par arbres B+ et B Ø Fonctions de hachage statique Ø Fonctions de hachage dynamique GPA775 Chapitre 8 - Indexage et hachage 3 Notions de base Dans les BD commerciales, il faut prévoir des techniques d'indexage qui permettent l'accès direct et rapide aux enregistrements. Ces techniques ont pour objectifs : Ø d’accélérer l'accès aux données; Ø de réduire le nombre d'opérations d'entrées/sorties. Pour ce faire, on peut utiliser : Ø un index; Ø une fonction de hachage. GPA775 Chapitre 8 - Indexage et hachage 4 Notions de base Les caractéristiques de ces deux méthodes sont : Ø temps d'accès : temps pour accéder à une donnée particulière; temps de recherche + temps de latence (chapitre 7) Ø délais d'insertion: délais pour la mise en place d’une nouvelle donnée et la mise à jour de l'index; Ø délais d'effacement: délais pour enlever une donnée avec la mise à jour de l'index; Ø occupation de la mémoire: espace occupé par les structures d'indexage. GPA775 Chapitre 8 - Indexage et hachage 5 Index Fichier contenant des pointeurs reliés à l'information; w équivalents aux index alphabétiques dans les bibliothèques; Ex: livres classés par: auteurs, titres, sujet, etc. Il existe trois types d'index : 1. fichiers séquentiels indexés (par fichiers d'index); 2. fichiers indexés par arbres B 3. fichiers indexés par arbres B+ GPA775 Chapitre 8 - Indexage et hachage 6 Fichiers séquentiels indexés Un fichier séquentiel se compose: 1. d'un ensemble d'enregistrements adjacents ordonnancés suivant une clé de tri (ex: ordre alphabétique des auteurs); 2. d'un ensemble de pointeurs permettant de gérer les effacements et les insertions; 3. d'un ensemble de blocs de débordement si nécessaire. C’est la structure de fichier la plus ancienne. Elle est utilisée pour: Ø le traitement séquentiel des enregistrements (de haut en bas), Ø l'accès aléatoire aux enregistrements. GPA775 Chapitre 8 - Indexage et hachage 7 Fichiers séquentiels indexés Exemple de fichier séquentiel (ordre alphabétique) : Clé de tri Enregistrement pointeur pointeur Enregistrement Brighton 217 Green 750 Downtown 101 Johnson 500 Downtown 110 Peterson 600 Mianus 215 Smith 700 Perryridge 102 Hayes 400 Perryridge 201 Williams 900 Perryridge 218 Lyle 700 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 Bloc de débordement GPA775 Chapitre 8 - Indexage et hachage il est difficile de maintenir l'aspect séquentiel au fil des insertions et des effacements. il est coûteux de déplacer de nombreux enregistrements lors de chacune de ces opérations. 8 Fichiers séquentiels indexés Pour les effacements et les insertions, nous utiliserons plutôt les pointeurs chaînés. Lors d’une insertion, on doit : 1. localiser l'enregistrement qui, suivant la logique du tri, doit précéder l'enregistrement à insérer, 2. Ø s'il existe un emplacement libre, on insère le nouvel enregistrement, Ø sinon on le place dans un bloc de débordement et on fixe les pointeurs de façon à conserver la continuité de la séquence (voir la figure suivante). GPA775 Chapitre 8 - Indexage et hachage 9 Fichiers séquentiels indexés Ex: Insertion de l’enregistrement North Town. 1. Localiser l’enregistrement qui le précède. Etape 1 2. Trouver l’emplacement libre et fixer les pointeurs. Etape 2 GPA775 Brighton 217 Green 750 Downtown 101 Johnson 500 Downtown 110 Peterson 600 Mianus 215 Smith Perryridge 102 Hayes Perryridge 201 Williams 900 Perryridge 218 Lyle 700 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 North Town 888 Adams 800 Chapitre 8 - Indexage et hachage Ensuite, ajoutez l’enregistrement: 700 Perryridge 101 400 Tremblay 400 Bloc de débordement 10 Fichiers séquentiels indexés PROBLÈME: Pour optimiser le nombre d'accès bloc, nous avons vu que les enregistrements devraient être stockés physiquement les uns à la suite des autres selon leur clé de tri… Mais si les insertions sont fréquentes, alors… • La correspondance entre ordre de tri initial et l'ordre physique peut être totalement perdue et enregistrements séquentiels perdent de leur intérêt. les Il faudrait réorganiser le fichier afin de le remettre en ordre physique, mais cela représente une opération très coûteuse. GPA775 Chapitre 8 - Indexage et hachage 11 Fichiers séquentiels indexés SOLUTION: Donc, un fichier séquentiel n'est pas suffisant pour garantir un temps d'accès adéquat à son information. Nous devons utiliser un mode composé : fichiers séquentiels + fichiers d'index où le fichier d'index contient la clé de tri + des pointeurs au fichier séquentiel indexé GPA775 Chapitre 8 - Indexage et hachage 12 Fichiers d’index Il existe deux types de fichiers d'index : 1. Index dense 2. Index non dense Index dense : Comporte un enregistrement pour chaque valeur de la clé de tri du fichier indexé. Avec le temps, ce type d'index peut occuper beaucoup d'espace mémoire. Mais..ils ont un temps de recherche très court. GPA775 Chapitre 8 - Indexage et hachage 13 Exemple d’index dense INDEX FICHIER BDD Brighton Brighton 217 Green 750 Downtown Downtown 101 Johnson 500 Mianus Downtown 110 Peterson 600 Perryridge Mianus 215 Smith 700 Redwood Perryridge 102 Hayes 400 RoundHill Perryridge 201 Williams 900 Perryridge 218 Lyle 700 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 Comporte un enregistrement pour chaque valeur de la clé de tri GPA775 Chapitre 8 - Indexage et hachage 14 Index non dense Index non dense Comporte des enregistrements pour certaines valeurs de la clé de tri du fichier indexé. • La recherche se fait sur des plages de valeurs (ex: recherche séquentielle à partir de Brighton jusqu'à Mianus). • Analogue à un pointeur de page (bloc). Les index non dense ont des avantages : • ils occupent moins d'espace; • ils imposent moins de servitudes lors d'insertions et d'effacements. Note: Le concepteur de la BD doit donc se fixer un compromis entre temps d'accès et l’espace mémoire. GPA775 Chapitre 8 - Indexage et hachage 15 Exemple d’index non dense INDEX FICHIER BDD Brighton Brighton 217 Green 750 Mianus Downtown 101 Johnson 500 Redwood Downtown 110 Peterson 600 Mianus 215 Smith 700 Perryridge 102 Hayes 400 Perryridge 201 Williams 900 Perryridge 218 Lyle 700 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 Comporte des enregistrements pour certaines valeurs de la clé de tri GPA775 Chapitre 8 - Indexage et hachage 16 Exemple d’index non dense Exemple d’index non dense à des pages blocs GPA775 Chapitre 8 - Indexage et hachage 17 Index non dense Pour les BD de grande dimension, même un index non dense peut devenir rapidement trop important. L'index peut occuper plusieurs blocs, ce qui nécessite plusieurs E/S. Ø Si le système utilise une recherche binaire (recherche dichotomique), pour un index occupant b blocs, on peut effectuer jusqu'à : 1 + log2 (b) lectures GPA775 Chapitre 8 - Indexage et hachage 18 Exemple Pour 100 000 enregistrements avec 10 enregistrements de données par blocs : 100000 / 10 = 10 000 blocs Si l'index non dense pointe sur 1 enregistrement de données par bloc… Donc, on a besoin de 10 000 enregistrements pour l'index! Supposons que l’on peut mettre 100 enregistrements index par bloc (les enregistrements de l'index sont beaucoup plus courts) : L'index nécessite alors 100 blocs (10 000/100=100) Ainsi, une recherche peut nécessiter jusqu'à 1 + log2 (100), c’est-àdire 7 lectures par recherche binaire. … autre exemple au tableau GPA775 Chapitre 8 - Indexage et hachage 19 Index non dense Si on a utilisé des blocs de débordement pour réaliser l'index, une recherche binaire ne peut être pratiquée. Il faut, alors, effectuer une recherche séquentielle, qui exige la lecture de la totalité des blocs de l'index. index interne Fichier Pour traiter ce problème, nous index externe bloc bloc données 0 pouvons utiliser un index index 0 de l'index. Cet solution consiste à traiter l'index comme un bloc bloc données 1 index 1 fichier séquentiel indexé. Index non dense à 2 niveaux bloc données 2 Note: En pratique de 2 à 3 niveaux d'indexage sont suffisants. GPA775 Chapitre 8 - Indexage et hachage 20 Index à plusieurs niveaux Procédure pour localiser un enregistrement : 1. on effectue une recherche binaire sur l'index externe pour déterminer l'enregistrement dont la clé de tri a une valeur < ou = à celle de l'enregistrement désiré; (Note:Normalement, cet index est de dimension réduite et est situé mémoire vive.) 2. le pointeur correspondant à l’enregistrement trouvé renvoie à un bloc de l'index interne (donc sur le disque); 3. on parcourt ce bloc jusqu'à tomber sur l'enregistrement dont la clé de tri a une valeur < ou = à celle de l'enregistrement désiré; 4. le pointeur stocké par cet enregistrement renvoie au bloc du fichier de données qui contient l'enregistrement recherché. GPA775 Chapitre 8 - Indexage et hachage 21 Exemple de recherche avec un index à 2 niveaux Retrouvez l’enregistrement dont la clé est 71? Algorithme appliqué à un index à deux niveaux Valeur de clé Avec un indexage à 2 niveaux, on a donc réussi à ne lire qu'un seul bloc index au lieu de 3 pour une économie appréciable de temps d'accès. GPA775 Chapitre 8 - Indexage et hachage 22 Index primaires et secondaires Les fichiers indexés de modèle standard sont gérés par un seul index. Si l’on veut améliorer les performances et utiliser plusieurs index, on utilise un index primaire et des index secondaires. Index primaire Ø Il y en a qu’un seul par fichier; Ø C’est l’index selon lequel un fichier séquentiel indexé est créé; Ø Il définit l'ordre séquentiel du fichier; Ø L’ordre de tri est donné par une clé primaire. GPA775 Chapitre 8 - Indexage et hachage 23 Index secondaire Ce sont tous les autres index utilisés par un fichier indexé. Ø Ils améliorent les performances de la BD lors de recherches qui ne portent pas sur des clés primaires; Ø Mais, ils imposent des problèmes supplémentaires lors de la modification de la BD. Les index secondaires sont des index denses puisque les données du fichier ne sont pas organisées en ordre séquentiel selon la clé sur laquelle ils sont basés. Ø une entrée est créée dans l’index secondaire pour chaque enregistrement du fichier des données. GPA775 Chapitre 8 - Indexage et hachage 24 Exemple d’index secondaire sur l’attribut client Cet exemple montre un index secondaire qui fait appel à un niveau d'adressage indirect auxiliaire (2 niveaux). Ø Les pointeurs pointent vers un paquet d'autres pointeurs qui, eux, renvoient au fichier. Ce paquet se compose de plusieurs blocs chaînés. INDEX FICHIER BDD groupement 1 Green Lindsay Smith groupement 2 groupement 3 GPA775 Brighton 217 Green 750 Downtown 101 Johnson 500 Downtown 110 Peterson 600 Mianus 215 Smith 700 Perryridge 102 Hayes 400 Perryridge 201 Williams 900 Perryridge 218 Lyle 700 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 Chapitre 8 - Indexage et hachage 25 Index secondaire En résumé: ØOn peut utiliser un fichier séquentiel indexé par un index primaire non dense basé sur une clé primaire ØOn peut utiliser un attribut important pour concevoir un index secondaire dense. • cet attribut est identifié par le concepteur de la BD en fonction de la fréquence des requêtes. GPA775 Chapitre 8 - Indexage et hachage 26 Fichiers indexés par arbres B+ ! Les fichiers séquentiels indexés perdent leurs performances lorsque leur taille grandit. Pour résoudre ce problème, on peut réorganiser ces fichiers, mais il est difficile de pratiquer souvent de telles réorganisations. Il existe une structure de fichier indexée par arbre B+ qui conserve son efficacité en dépit de tout effacement ou insertion de données. Ø Index B+ (où B signifie "balanced" (équilibré)) • C’est une structure de fichier d'index très populaire; • Elle est basée sur un index multi-niveaux structuré en arbre; GPA775 Chapitre 8 - Indexage et hachage 27 Fichiers indexés par arbres B+ Un index B+ se structure comme suit : 12 6 8 12 32 15 18 32 35 40 50 51 52 58 50 82 58 70 60 62 70 89 71 78 82 83 85 89 Ensemble d’index en arborescence 94 91 93 94 96 97 99 Ensemble d’index séquentiel Clé de tri Index séquentiel: Ø C’est le fichier séquentiel indexé contenant la BD; Ø Normalement, c’est un index dense, mais il peut être non dense si les données sont groupées dans un bloc; Ø Les entrées de l'index sont groupées en "pages" chaînées; GPA775 Chapitre 8 - Indexage et hachage 28 Fichiers indexés par arbres B+ Index en arborescence: Ø Il permet un accès rapide à l'ensemble d’index séquentiel; Ø Il est structuré en arbre équilibré: • e.i, les chemins qui conduisent de la racine à une feuille quelconque sont tous de la même longueur; (exemple tableau) Ø Une feuille de l'arbre est appelée noeud terminal d'ordre n. Pour un arbre d'ordre n, il comprend : • n-1 valeurs de clés de tri: K1, K2, ... Kn-1 • n pointeurs P1, P2, ... Pn . Nœud terminal d’une arborescence B P1 ↓ Clé de tri GPA775 K1 P2 ↓ ... Pn-1 ↓ Chapitre 8 - Indexage et hachage Kn-1 + Pn ↓ pointeur 29 Fichiers indexés par arbres B+ Ex: Nous voulons les données qui correspondent à la clé 89 sur la figure suivante; 1. Un pointeur de la racine de l'arbre B+ (82->ptr) pointe vers un autre pointeur (89->ptr). 2. Le pointeur (89->ptr) pointe sur un paquet de pointeurs (83,85 et 89) de l'ensemble séquentiel. 3. De façon séquentiel, il recherche la clé de tri 89 qui renvoie à un enregistrement de données. Nœud terminal d’une arborescence B + P1 Ordre 3: 2 clés de tri et 3 pointeurs par nœud. 12 6 8 K1 ↓ 12 GPA775 15 P2 ... P n-1 ↓ Kn-1 ↓ Pn ↓ 32 18 32 35 40 50 51 52 58 50 82 58 70 60 62 89 70 71 78 Chapitre 8 - Indexage et hachage 82 83 85 89 94 91 93 94 96 30 97 99 Fichiers indexés par arbres B+ Voici les contraintes de construction pour la réalisation d’un arbre B+ en imposant un ordre n: 1. Chaque noeud peut être caractérisé par: maximum n-1 valeurs de clé, 2. Chaque noeud doit avoir: minimum de n/2 pointeurs, (sauf pour la racine) 3. Chaque noeud terminal a: minimum de (n-1)/2 valeurs de clé. Note : Il faut arrondir à l'entier supérieur. GPA775 Chapitre 8 - Indexage et hachage 31 Algorithme d’insertion dans un arbre B+ 1. Trouvez la feuille où l’on doit insérer la nouvelle valeur en suivant la règle de <= à gauche ( ou >= à droite ). 2. Insérer dans la feuille en ordre de tri. Si la feuille est pleine, alors il y a débordement. Il faut alors: Ø Créer un nouveau nœud et insérer les j = [( p + 1 )/ 2 ] premières entrées dans le nœud original et les autres entrées dans le nouveau nœud. Ø La jième valeur de clé (+1 pour la règle du >= à droite ) est répliquée dans le parent et un nouveau pointeur au nouveau nœud est aussi ajouté au parent. S’il y a débordement dans le parent, Il faut: • Créer un nouveau nœud. Les entrées dans le nœud interne jusqu’à Pj reste en place. Pj est le jième pointeur après insertion de la nouvelle valeur, où j = [ ( p + 1 )/2 ]. • La jième valeur (+1 pour la règle du >= à droite ) de clé est déplacée, et non pas répliquée dans le parent. • Le nouveau nœud va contenir les entrées à partir de Pj+1 jusqu’à la fin des entrées. Note : Les divisions peuvent se propager jusqu’à créer une nouvelle racine et par conséquent un nouveau niveau pour l’arbre B+. GPA775 Chapitre 8 - Indexage et hachage 32 Algorithme d’effacement dans un arbre B+ 1. Lorsqu’une entrée est effacée, elle est d’abord retirer de son nœud 2. 3. 4. 5. terminal (sa feuille). Si cette valeur est aussi dans un nœud interne, elle doit aussi y être retirée. La valeur à sa gauche (à sa droite pour la règle du >= à droite) dans le nœud terminal la remplace dans le nœud interne. L’effacement peut causer une insuffisance de valeur dans le nœud terminal. Dans ce cas, il faut faire une redistribution des valeurs avec les feuilles voisines afin que toutes les feuilles aient le nombre minimum de valeur requis. Si la redistribution est impossible, il faut fusionner des feuilles. Lorsque des feuilles sont fusionnées, les insuffisances de valeur peuvent se propager dans les nœuds internes puisque moins de pointeur sont requis. Il faut alors comprimer les nœuds internes en suivant les règles de base. Notez que la propagation peut entraîner l’élimination d’un niveau. GPA775 Chapitre 8 - Indexage et hachage 33 Exemple d’un fichiers indexés par arbres B+ Exemple : Soit la relation Dépôt suivante : Brighton 217 Green 750 Downtown 101 Johnson 500 Mianus 215 Smith 700 Perryridge 102 Hayes 400 Redwood 222 Lindsay 700 RoundHill 305 Turner 350 ClearView 117 Throggs 295 L’exemple qui suit illustre un index à arbre B+ qui fait référence aux 6 premiers enregistrements de la relation Dépôt. GPA775 Chapitre 8 - Indexage et hachage 34 Arborescence B+ pour le fichier Dépôt (ordre n = 3 ) Caractéristiques: • (n-1) valeurs = 2; • un minimum de n/2 pointeurs = 2; • un minimum de (n-1)/2 valeurs pour les nœuds terminaux = 1. Perryridge Mianus Brighton GPA775 Downtown Redwood Mianus Perryridge Chapitre 8 - Indexage et hachage Redwood RoundHill 35 Arborescence B+ pour le fichier Dépôt (ordre n = 5 ) Caractéristiques: • (n-1) valeurs = 4; • un minimum de n/2 pointeurs = 3; • un minimum de (n-1)/2 valeurs pour les nœuds terminaux = 2. Perryridge Brighton GPA775 Downtown Mianus Perryridge Chapitre 8 - Indexage et hachage Redwood RoundHill 36 Fichiers indexés par arbres B+ Ex: Insertion des clés 8,5,1,7,3,12,9,6 dans un arbre B+ d’ordre 3 Page 173 ( Démonstration au tableau) GPA775 Chapitre 8 - Indexage et hachage 37 Fichiers indexés par arbres B+ Ex: Destruction des clés 5,12 et 9 dans un arbre B+ d’ordre 3 GPA775 Chapitre 8 - Indexage et hachage 38 Fichiers indexés par arbres B+ Exercices: Soit l'ensemble des valeurs de clé(2,3,5,7,11,17,19,23,29,31): 1.construire un arbre B+ d'ordre 4; 2.construire un arbre B+ d'ordre 6. GPA775 Chapitre 8 - Indexage et hachage 39 Fichiers indexés par arbres B Les index à arbre B sont semblable aux index à arbre B+, sauf que la structure B élimine le stockage redondant des valeurs de clé de tri. Dans la structure de l'arborescence B+ pour le fichier Dépôt, les clés de recherche Mianus et Redwood apparaissent deux fois. La structure B, correspondant à ce cas, n'autorise qu'une seule apparition de chaque valeur de clé de tri. GPA775 Chapitre 8 - Indexage et hachage 40 Fichiers indexés par arbres B Arbre B sans redondance du fichier Dépôt Downtown Paquet de Downtown Brighton Paquet de Brighton Clearview Paquet de Clearview Mianus Paquet de Mianus Redwood Paquet de Redwood Perryridge Paquet de Perryridge RoundHill Paquet de RoundHill L’arbre B sans redondance est équivalent à l’arbre B+ que nous avons vue précédemment (augmenté de l’agence Clearview); Remarquez que la racine contient 5 pointeurs et les feuilles que 3. GPA775 Chapitre 8 - Indexage et hachage 41 Fichiers indexés par arbres B Chaque noeud de l'arbre conserve un pointeur vers l'ensemble séquentiel. a) Représente la structure d’un nœud dans un arbre B; b) Un arbre B d’ordre 3 avec des valeurs insérées selon la séquence : 8, 5, 1, 7, 3, 12, 9 et 6 GPA775 Chapitre 8 - Indexage et hachage 42 Comparaison des arborescences de type B et B+ Ø Dans une arborescence B+, il faut toujours suivre un cheminement qui va de la racine à un noeud terminal. Ø Dans une arborescence B, on peut trouver la valeur désirée avant d'atteindre un noeud terminal. • Une telle recherche est par conséquent plus rapide. Les avantages des arbres B sur les arbres B+ sont malheureusement contrebalancés par de nombreux inconvénients. Ø Les noeuds non terminaux et les noeuds terminaux ne sont pas de même dimension. (moins de pointeurs) Ø L'effacement au sein d'un arbre B est plus compliqué que sur un arbre B+. Ainsi, la simplicité structurelle des arborescences B+ a la préférence pour la plupart des concepteurs de SGBD. GPA775 Chapitre 8 - Indexage et hachage 43 Fonction de hachage statique Le défaut de tous les index est qu'il faut les parcourir pour localiser les données auxquelles ils renvoient. Les techniques de hachage nous permettent d'éviter ce handicap. Ø Elle utilise une technique basée sur le calcul de l'adresse d'une information dans la BD à l'aide d'une fonction dont la variable est la valeur de la clé de tri : Bi = h (Ki) Où K : ensemble de toutes les valeurs de clés de tri, B : ensemble de toutes les adresses des données de la BD, h : fonction de hachage (application de K vers B). Note : Le concepteur de la BD doit fixer à l'origine la dimension de B. GPA775 Chapitre 8 - Indexage et hachage 44 Fonctionnement du hachage statique Chaque enregistrement est placé en mémoire de la BD à une adresse (ou page, ou bloc) telle qu'évaluée par la fonction de hachage: c'est l'adresse de hachage; Ø Pour inscrire l'enregistrement une première fois, le SGBD calcule l'adresse de hachage et dicte celle-ci au système d'exploitation des fichiers; Ø Pour retrouver cet enregistrement, le SGBD… 1. calcule de la même façon l'adresse de hachage 2. demande au système d'exploitation d'effectuer la lecture de l'enregistrement (de la page ou du bloc) désiré. GPA775 Chapitre 8 - Indexage et hachage 45 Exemple de fonction de hachage statique Ex: Supposons que les numéros des agences d'un fournisseur sont les suivants : • S100, S200, S300, S400, S500 et que chaque enregistrement "fournisseur" requiert une page complète (plusieurs blocs). GPA775 Chapitre 8 - Indexage et hachage 46 Exemple de fonction de hachage statique Une fonction de hachage adéquate pourrait être : Ø le reste après la division du numéro du fournisseur par la valeur 13, Pour l’exemple, l'adresse des données calculée correspond aux numéros de page (adresse de hachage) qui sont: Pour le premier fournisseur S100, 100 / 13 = 7.692 et le reste représente l'adresse : 0.692 * 13 = 9 de même pour les autres : Adresse S200 = 5, S300 = 1, S400 = 10 et S500 = 6 GPA775 Chapitre 8 - Indexage et hachage 47 Particularités des fonctions de hachage Ø Un fichier sur disque peut n'avoir qu'une seule structure de hachage alors qu'il peut avoir plusieurs index. Ø La séquence d'écriture du fichier de données ne correspond à aucune séquence logique de tri; Ø Il peut exister des espaces vides de grandeur arbitraire entre les enregistrements; Ø Il y a possibilité de "collisions"; e.i., il peut y avoir deux clés de tri distinctes K pointant vers la même adresse de hachage! GPA775 Chapitre 8 - Indexage et hachage 48 Exemple de collisions Exemple : Si on a un fournisseur S1400, on aura une collision avec le fournisseur S100 car les deux auront la même adresse de hachage : 9 1400 / 13 = 107.692 et le reste représente l'adresse : 0.692 * 13 = 9 Solution : Cette adresse (9) peut être utilisée comme point de départ d'une recherche séquentielle. GPA775 Chapitre 8 - Indexage et hachage 49 Fonction de hachage statique Une bonne fonction de hachage remplit l'un des conditions suivantes : Ø la distribution des clés de tri est uniforme vis-à-vis des paquets; Ø la distribution des clés est aléatoire, e.i qu'en moyenne, chaque paquet se voit assigner un nombre homogène de valeurs de clé de tri; Une mauvaise fonction de hachage remplit la condition suivante : Ø place la majorité des clés dans le même paquet. GPA775 Chapitre 8 - Indexage et hachage 50 Fonction de hachage statique L'inconvénient majeur du choix d'une fonction de hachage statique est qu'il est pratiquement impossible de modifier ce choix. De plus, si la dimension de l’ensemble de toutes les adresses est excessive, on perd de la place. Par contre si la dimension de l’ensemble de toutes les adresses est trop faible, alors les paquets contiennent des enregistrements relatifs à des valeurs de clés très diverses, et les performances de la base s'en ressentent. Finalement, il faut prévoir un algorithme de rechange si l'adresse calculée est déjà occupée. GPA775 Chapitre 8 - Indexage et hachage 51 Fonction de hachage statique a) Exemple d’algorithme de hachage utilisant la fonction mod; b) Exemple d’algorithme de résolution de collision GPA775 Chapitre 8 - Indexage et hachage 52 Fonction de hachage statique Le besoin de fixer la grandeur de l'ensemble des adresses constitue un problème non négligeable. La plupart des BD ont tendance à grossir avec le temps. Si on utilise une fonction de hachage statique, alors il faut tenir comptes des 3 options suivantes, soit : Ø garder une fonction de hachage adaptée à la taille originelle des fichiers et les performances de la base se dégraderont lors de sa croissance; Ø choisir une fonction de hachage adaptée à la dimension attendue des fichiers à moyen ou à long terme; les performances de la base iront en s'améliorant, mais l'espace mémoire est mal utilisée au début de l'exploitation de la base; Ø réorganiser périodiquement le hachage de la structure pour l'adapter à la dimension courante des fichiers (nouvelle fonction de hachage, calcul des nouvelles adresses, ...). Ce processus est coûteux en temps machine et les fichiers sont inaccessibles pendant la réorganisation. GPA775 Chapitre 8 - Indexage et hachage 53 Fonction de hachage dynamique Il existe des fonctions de hachage qui autorise la modification dynamique des fonctions qui structures la base lorsque celle-ci croît ou décroît. Il existe plusieurs techniques de hachage dynamique dont le hachage extensible. Cette technique permet de tenir compte de l'évolution de la BD en fractionnant les paquets qui la constituent. GPA775 Chapitre 8 - Indexage et hachage 54 Fonctionnement du hachage extensible 1. Le concepteur choisit une fonction de hachage h qui porte sur un nombre b d'adresses élevées; par exemple 232 (4 milliards). La figure suivante montre les 32 bits qui peuvent servir à l'adressage; 2. Tous ces paquets sont créés à la demande lorsque les enregistrements sont insérés dans la base. GPA775 Chapitre 8 - Indexage et hachage 55 Fonctionnement du hachage extensible 3. À un instant donné, on en utilise i bits avec 0 ≤ i ≤ b, ces i bits sont utilisés en tant que branchement dans un arbre dynamique d'adressage. 4. La dimension de l'arbre croît en fonction du nombre d'enregistrements à ajouter dans la BD. GPA775 Chapitre 8 - Indexage et hachage 56 Comparaison entre l'indexage et le hachage Pour comparer les méthodes d'indexage et de hachage, il faut répondre aux questions suivantes : Ø Le coût des réorganisations périodiques de l'index ou du hachage est-il acceptable ? Ø Quelles sont les fréquences comparées des insertions et des effacements ? Ø Est-il souhaitable d'optimiser le temps d'accès moyen au prix de l'accroissement du temps d'accès dans le cas le plus défavorable ? Ø Quelles requêtes seront le plus fréquemment faites à la BD ? GPA775 Chapitre 8 - Indexage et hachage 57 Comparaison entre l'indexage et le hachage Pour répondre à ces questions, il faut regarder les avantages et inconvénients des deux méthodes et les appliquer à des problèmes spécifiques. Ø Cette étude dépasse le cadre du cours. Cependant, l'expérience a montré que la majorité des concepteurs de SGBD ont opté pour l'indexage. Ce choix provient des difficultés suivantes : Ø La difficulté d'obtention de fonctions de hachage statique qui permettent de distribuer de façon aléatoire la répartition des paquets; Ø La difficulté de la programmation liée à complexité du hachage dynamique. GPA775 Chapitre 8 - Indexage et hachage 58