Chapitre 08 - Indexage et hachage

publicité
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
Téléchargement