Post on 13-Sep-2018
Chapitre 8
Indexage et hachage
GPA775 Chapitre 8 - Indexage et hachage 2
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 d’atteindre directement l’information requise.
Alors, il faudra ajouter au SGBD des structures qui utilisent soit des index ou des fonctions de hachage.
GPA775 Chapitre 8 - Indexage et hachage 3
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 4
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 5
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 6
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 7
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 8
Fichiers séquentiels indexés
Exemple de fichier séquentiel (ordre alphabétique) :
Brighton 217 750Green
Downtown 101 500Johnson
Downtown 110 600Peterson
Mianus 215 700Smith
Perryridge 102 400Hayes
Perryridge 218 700Lyle
Perryridge 201 900Williams
Redwood 222 700Lindsay
RoundHill 305 350Turner
Enregistrement
Enregistrement
Clédetri
pointeur
pointeur
Bloc de débordement
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.
GPA775 Chapitre 8 - Indexage et hachage 9
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 10
Fichiers séquentiels indexés
Ex: Insertion de l’enregistrement North Town.
Brighton 217 750Green
Downtown 101 500Johnson
Downtown 110 600Peterson
Mianus 215 700Smith
Perryridge 102 400Hayes
Perryridge 218 700Lyle
Perryridge 201 900Williams
Redwood 222 700Lindsay
RoundHill 305 350Turner
North Town 888 800Adams
Etape 1
Etape 2 Bloc de débordement
1. Localiser l’enregistrement qui le précède.
2. Trouver l’emplacement libre et fixer les pointeurs.
Ensuite, ajoutez l’enregistrement: Perryridge 101 Tremblay 400
GPA775 Chapitre 8 - Indexage et hachage 11
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 les enregistrements séquentiels perdent de leur intérêt.
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 12
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 13
Fichiers d’index
Il existe deux types de fichiers d'index :1. Index dense2. 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 14
Exemple d’index dense
Brighton 217 750Green
Downtown 101 500Johnson
Downtown 110 600Peterson
Mianus 215 700Smith
Perryridge 102 400Hayes
Perryridge 218 700Lyle
Perryridge 201 900Williams
Redwood 222 700Lindsay
RoundHill 305 350Turner
Brighton
Downtown
Mianus
Perryridge
Redwood
RoundHill
INDEX FICHIER BDD
Comporte un enregistrement pour
chaque valeur de la cléde tri
GPA775 Chapitre 8 - Indexage et hachage 15
Index non dense
Index non denseComporte des enregistrements pour certaines valeursde 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 16
Exemple d’index non dense
Brighton 217 750Green
Downtown 101 500Johnson
Downtown 110 600Peterson
Mianus 215 700Smith
Perryridge 102 400Hayes
Perryridge 218 700Lyle
Perryridge 201 900Williams
Redwood 222 700Lindsay
RoundHill 305 350Turner
Brighton
Mianus
Redwood
INDEX FICHIER BDD
Comporte des enregistrements pour certaines
valeurs de la clé de tri
GPA775 Chapitre 8 - Indexage et hachage 17
Exemple d’index non dense
Exemple d’index non dense à des pages blocs
GPA775 Chapitre 8 - Indexage et hachage 18
Index non dense
Pour les BD de grande dimension, même un index non densepeut 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 19
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 20
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.Pour traiter ce problème, nous pouvons utiliser un index de l'index. Cet solution consiste à traiter l'index comme un fichier séquentiel indexé.
Index non dense à 2 niveaux
Note: En pratique de 2 à 3 niveaux d'indexage sont suffisants.
index externe index interne Fichier
blocindex 0
blocindex 1
blocdonnées 0
blocdonnées 1
blocdonnées 2
GPA775 Chapitre 8 - Indexage et hachage 21
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 22
Exemple de recherche avec un index à 2 niveaux
Retrouvez l’enregistrement dont la clé est 71?
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.
Valeur de clé
Algorithme appliqué à un index à deux niveaux
GPA775 Chapitre 8 - Indexage et hachage 23
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 24
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 25
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.
Brighton 217 750Green
Downtown 101 500Johnson
Downtown 110 600Peterson
Mianus 215 700Smith
Perryridge 102 400Hayes
Perryridge 218 700Lyle
Perryridge 201 900Williams
Redwood 222 700Lindsay
RoundHill 305 350Turner
Green
Lindsay
Smith
groupement 1 FICHIER BDD
groupement 2
groupement 3
INDEX
GPA775 Chapitre 8 - Indexage et hachage 26
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 27
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 28
Fichiers indexés par arbres B+
Un index B+ se structure comme suit :
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;
50 82
12 32
6 8 12 15 18 32 35 40 50
58 70
51 52 58 60 62 70 71 78 82
89 94
83 85 89 91 93 94 96 97 99Ensemble d’index séquentiel
Ensemble d’index enarborescence
Clé de tri
GPA775 Chapitre 8 - Indexage et hachage 29
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
↓
K1 P2
↓
... Pn-1
↓
Kn-1
Pn
↓ Clé de tri
pointeur
GPA775 Chapitre 8 - Indexage et hachage 30
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.
50 82
12 32
6 8 12 15 18 32 35 40 50
58 70
51 52 58 60 62 70 71 78 82
89 94
83 85 89 91 93 94 96 97 99
Nœud terminal d’une arborescence B +
P1
↓
K1 P2
↓
... Pn-1
↓
Kn-1
Pn
↓
Ordre 3: 2 clés de tri et3 pointeurs par nœud.
GPA775 Chapitre 8 - Indexage et hachage 31
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 valeursde clé.
Note : Il faut arrondir à l'entier supérieur.
GPA775 Chapitre 8 - Indexage et hachage 32
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 33
Algorithme d’effacement dans un arbre B+
1. Lorsqu’une entrée est effacée, elle est d’abord retirer de son nœud terminal (sa feuille).
2. 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.
3. 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.
4. Si la redistribution est impossible, il faut fusionner des feuilles.5. 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 34
Exemple d’un fichiers indexés par arbres B+
Exemple : Soit la relation Dépôt suivante :
L’exemple qui suit illustre un index à arbre B+ qui fait référence aux 6 premiers enregistrements de la relation Dépôt.
Brighton 217 750Green
Downtown 101 500Johnson
Mianus 215 700Smith
Perryridge 102 400Hayes
Redwood 222 700Lindsay
RoundHill 305 350Turner
ClearView 117 295Throggs
GPA775 Chapitre 8 - Indexage et hachage 35
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.
Brighton Mianus Perryridge
Redwood
Downtown RoundHill
Mianus
Redwood
Perryridge
GPA775 Chapitre 8 - Indexage et hachage 36
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.
Brighton Mianus PerryridgeDowntown RoundHillRedwood
Perryridge
GPA775 Chapitre 8 - Indexage et hachage 37
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 38
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 39
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 40
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 41
Fichiers indexés par arbres B
Arbre B sans redondance du fichier Dépôt
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.
MianusClearview
Downtown
PerryridgeBrighton RoundHill
Redwood
Paquet deBrighton
Paquet deClearview
Paquet deDowntown
Paquet deRedwood
Paquet deMianus
Paquet dePerryridge
Paquet deRoundHill
GPA775 Chapitre 8 - Indexage et hachage 42
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 43
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 avantd'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 44
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 45
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 hachage2. 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 46
Exemple de fonction de hachage statique
Ex: Supposons que les numéros des agences d'un fournisseur sont les suivants :
• S100, S200, S300, S400, S500et que chaque enregistrement "fournisseur" requiert une page complète (plusieurs blocs).
GPA775 Chapitre 8 - Indexage et hachage 47
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 :
S200 = 5, S300 = 1, S400 = 10 et S500 = 6
Adresse
GPA775 Chapitre 8 - Indexage et hachage 48
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 49
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 50
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 51
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 52
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 53
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 originelledes 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 54
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 55
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 56
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 57
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 58
Comparaison entre l'indexage et le hachage
Pour répondre à ces questions, il faut regarder les avantageset 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.