Chap. 8 Indexage et hachage
Download
Report
Transcript Chap. 8 Indexage et hachage
8 Organisations unidimentionnelles :
indexage et hachage
Sélection basée sur une clé d'accès
–
recherche associative
–
Ex: Chercher le plant dont le noCatalogue = 10
Sériel
–
lire tout le fichier en pire cas
–
O(N)
Indexage
–
O(log(N))
–
sélection par intervalle
Hachage
–
21/07/2015
~O(1)
© Robert Godin. Tous droits réservés.
1
8.1
Indexage
Index et clé d'index (index key)
–
valeur de la clé =>adresse de(s) l'enregistrement
Index
10
20
40
50
60
70
80
81
90
95
10
Cèdre en boule
Numéro
d'enregistrement
relatif
0
10.99
40
Epinette bleue
25.99
1
90
Pommier
25.99
2
60
Erable argenté
15.99
3
50
Chêne
22.99
4
81
Catalpa
25.99
5
95
Génévrier
15.99
6
70
Herbe à puce
10.99
7
20
Sapin
12.99
8
80
Poirier
26.99
9
Numéro
de bloc
0
8
1
4
3
7
9
5
2
6
0
1
Index dense secondaire
21/07/2015
© Robert Godin. Tous droits réservés.
2
Fichier séquentiel indexé
Numéro
de bloc
Index
10
70
0
1
0
Non dense
Index plus petit
Accès séquentiel rapide
Primaire
21/07/2015
1
Numéro
d'enregistrement
relatif
0
10.99
10
Cèdre en boule
20
Sapin
12.99
1
40
Epinette bleue
25.99
2
50
Chêne
22.99
3
60
Erable argenté
15.99
4
70
Herbe à puce
10.99
5
80
Poirier
26.99
6
81
Catalpa
25.99
7
90
Pommier
25.00
8
95
Génévrier
15.99
9
© Robert Godin. Tous droits réservés.
3
Index séquentiel hiérarchique
Niveau 1
d'index
Niveau 2
d'index
10
80
...
10
40
60
80
90
...
...
...
10
Cèdre en boule
10.99
20
Sapin
12.99
40
Epinette bleue
25.99
50
Chêne
22.99
60
Erable argenté
15.99
70
Herbe à puce
10.99
80
Poirier
26.99
Ex: ISAM de IBM
81
Catalpa
25.99
Zone de débordement
90
Pommier
25.00
95
Génévrier
15.99
Réorganisations chroniques
21/07/2015
© Robert Godin. Tous droits réservés.
4
8.1.1 Indexage par
Arbre-B et variantes
Arbre-B (B-arbre, B-tree)
–
forme d ’index hiérarchique
–
équilibré
–
O(log(N)) en pire cas
Réoganisation dynamique
21/07/2015
–
division/fusion des blocs
–
taux d ’occupation minimum de 50%
© Robert Godin. Tous droits réservés.
5
8.1.2 Arbre-B+
Hypothèse initiale : clé simple et unique
Nœud = bloc
Bloc 7
50
Bloc 2
25 40
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
© Robert Godin. Tous droits réservés.
Bloc 5
50
53
Bloc 4
60
70
6
Structure d ’une feuille
1. Remplie à moitié au minimum FBMf/2 ≤ n = nombre de clés ≤ FBMf
2. Clés triées : i < j Ci < Cj
3. Clés d'une feuille < clés de la suivante
4. Au même niveau (équilibré)
C1
R1
...
Cn
Rn
Ci : Clé
Ri : reste de l'enregistrement ou référence
S : Pointeur sur le bloc suivant dans la liste des feuilles
21/07/2015
© Robert Godin. Tous droits réservés.
Espace
libre
S
7
Structure d’un bloc interne
1. Remplie à moitié au minimum:
–
OrdreI /2 ≤ n = nombre de pointeurs ≤ OrdreI
2. Clés triées : i < j Ci < Cj
3. Ci-1 <= Clés sous Pi-1 < Ci
P1
C < C1
21/07/2015
C1
P2
...
Ci-1
Pi-1
Ci
...
Ci-1 <= C < Ci
© Robert Godin. Tous droits réservés.
Pn-1
Cn-1
Pn
Espace
libre
Cn-1 <= C
8
8.1.2.1 Recherche
dans un arbre-B+
RechercherClé (noBloc, clé, indice)
Entrée
noBloc : typeNuméroBloc {numéro du bloc à chercher; racine au premier appel}
clé
: typeClé {la clé à chercher}
Sortie
noBloc : typeNuméroBloc {numéro du bloc où est la clé }
indice : 1..FBMf { si clé trouvée, indice de la clé dans le tableauClés du bloc}
valeur de retour : BOOLÉEN;{vrai si clé a été trouvée}
Pré-condition : arbre n'est pas vide
DÉBUT
lireBloc(fichierArbre-BPlus, noBloc, bloc);
TANT QUE bloc n'est pas une feuille
indice := l'indice de la plus petite clé de tableauClés plus grande que clé (ou n);
noBloc:= tableauEnfants[indice];
lireBloc(fichierArbre-BPlus, noBloc, bloc);
FIN TANT QUE;
SI la clé est présente dans tableauClés
indice := l'indice de la clé dans le tableauClés;
retourner VRAI;
SINON
retourner FAUX
FIN SI
FIN
21/07/2015
© Robert Godin. Tous droits réservés.
9
Rechercher 43
Bloc 7
50
Bloc 2
25 40
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
© Robert Godin. Tous droits réservés.
Bloc 5
50
53
Bloc 4
60
70
10
8.1.2.2 Complexité de la
recherche et hauteur de l'arbre
FBMf
= 20 et OrdreI = 200
Hauteur = nombre de niveaux
Hauteur 2 N 2 * 10 = 20 clés (pire cas)
Hauteur 3 N 2 * 100 * 10 = 2 000 clés
Hauteur 4 N 2 * 100 * 100 * 10 = 200 000 clés
Hauteur 5 N 2 * 100 * 100 * 100 * 10 = 20 000 000 clés
Hauteur H N 2*OrdreI /2H-2 * FBMf/2 pour H 2
H
–
21/07/2015
2 + log OrdreI /2 (N /(2*FBMf/2))
O(log N)
© Robert Godin. Tous droits réservés.
11
Hauteur moyenne
H ~ 1 + log
OrdreMoyenI
(N / FBf)
–
OrdreMoyenI = 2/3 OrdreI
–
FBf = 2/3 FBMf
Index secondaire
21/07/2015
–
FBf ~ OrdreMoyenI
–
H = log
OrdreMoyenI
(N)
© Robert Godin. Tous droits réservés.
12
8.1.2.3
Insertion dans un arbre-B+
FBM = 3, OrdreI = 4
Bloc 0
40
...
Bloc 0
20
...
40
...
Bloc 0
20
...
40
...
21/07/2015
60
© Robert Godin. Tous droits réservés.
...
13
Débordement et division
Insertion de 30
Débordement et la division du bloc 0
40 est promue
Nouvelle racine
Bloc 0
20
...
40
...
60
...
Bloc 2
40
Bloc 0
20
21/07/2015
...
30
...
Bloc 1
40
...
© Robert Godin. Tous droits réservés.
60
...
14
Insertion de 25
Bloc 2
40
Bloc 0
20
...
30
Bloc 1
40
...
...
60
...
Bloc 2
40
Bloc 0
20
25
21/07/2015
30
Bloc 1
40
60
© Robert Godin. Tous droits réservés.
15
Insertion de 10
Débordement et la division du bloc 0
Bloc 2
25 est promue
40
Bloc 0
20
25
Bloc 1
40
60
30
Bloc 2
25
Bloc 0
10
20
21/07/2015
40
Bloc 3
25
30
© Robert Godin. Tous droits réservés.
Bloc 1
40
60
16
Insertion de 70
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
21/07/2015
40
Bloc 1
40
60
40
Bloc 3
25
30
© Robert Godin. Tous droits réservés.
Bloc 1
40
60
70
17
Insertion de 50
Débordement et la division du bloc 1
Bloc 2
60 est promue
25
Bloc 0
10
20
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
21/07/2015
40
Bloc 3
25
30
40
Bloc 1
40
60
70
60
Bloc 1
40
50
© Robert Godin. Tous droits réservés.
Bloc 4
60
70
18
Insertion de 53
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
21/07/2015
Bloc 3
25
30
60
Bloc 1
40
50
Bloc 2
25
Bloc 0
10
20
40
40
Bloc 4
60
70
60
Bloc 1
40
50
© Robert Godin. Tous droits réservés.
53
Bloc 4
60
70
19
Insertion de 45
Division du bloc 1
50 est promue
Division de la racine
Bloc 0
10
20
Bloc 2
25
40
Bloc 3
25
30
60
Bloc 1
40
50
53
Bloc 4
60
70
Bloc 7
50
Bloc 2
25
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
Bloc 6
60
40
Bloc 1
40
45
Bloc 5
50
53
© Robert Godin. Tous droits réservés.
Bloc 4
60
70
20
8.1.2.4
Suppression
dans un arbre-B+
Cas simple
–
–
minimum préservé
pas la première
Bloc 0
10
20
Bloc 2
25
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
21/07/2015
40
Bloc 1
40
60
70
40
Bloc 3
25
30
Bloc 1
40
60
© Robert Godin. Tous droits réservés.
21
Première clé du bloc et
pas la première feuille
Remplacer dans le parent (si pas « aîné »)
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
21/07/2015
40
Bloc 1
40
60
70
60
Bloc 3
25
30
Bloc 1
60
70
© Robert Godin. Tous droits réservés.
22
Première clé du bloc et
pas la première feuille
Remonter tant que l'enfant est l ’« aîné »
Bloc 7
50
Bloc 2
25
Bloc 0
10
20
40
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
Bloc 5
50
53
55
Bloc 4
60
70
Bloc 7
53
Bloc 2
25
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
40
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
© Robert Godin. Tous droits réservés.
Bloc 5
53
55
Bloc 4
60
70
23
Violation du minimum :
redistribution si possible
Ajuster séparateur
Bloc 0
20
25
Bloc 2
40
Bloc 1
40
60
30
Bloc 2
30
Bloc 0
20
25
21/07/2015
© Robert Godin. Tous droits réservés.
Bloc 1
30
60
24
Violation du minimum :
fusion
Violation de la
règle du minimum
Bloc 0
10
20
Bloc 2
25
60
Bloc 3
25
30
Fusion des deux frères
Bloc 1
60
70
Bloc 2
60
Bloc 0
10
25
21/07/2015
Bloc 1
60
70
30
© Robert Godin. Tous droits réservés.
25
Cas de fusion de feuilles et de
redistribution au niveau du parent
Bloc 7
50
Bloc 2
25
Bloc 0
10
20
Bloc 6
60
40
Bloc 3
25
30
Bloc 1
40
45
Bloc 5
50
53
Violation de la
règle du minimum
Bloc 4
60
70
Fusion des deux frères
Bloc 7
50
Bloc 2
25
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
Violation de la
règle du minimum
Redistribution
Bloc 6
60
40
Bloc 1
40
45
Bloc 5
50
60
© Robert Godin. Tous droits réservés.
70
26
Cas de fusion de feuilles et de
redistribution au niveau du parent
(suite)
Bloc 7
50
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
Violation de la
règle du minimum
Redistribution
Bloc 6
60
40
Bloc 1
40
45
Bloc 5
50
60
70
Bloc 7
40
Bloc 2
25
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
Bloc 6
50
Bloc 1
40
45
Bloc 5
50
60
© Robert Godin. Tous droits réservés.
70
27
Cas de fusion en cascade
Bloc 7
40
Violation de la
règle du minimum
Bloc 0
10
20
Bloc 2
25
Bloc 6
50
Bloc 3
25
30
Fusion des deux frères
Violation de la
règle du minimum
Bloc 1
40
45
Bloc 5
50
60
70
Bloc 5
50
60
70
Bloc 7
40
Bloc 2
25
Bloc 6
50
Fusion des deux frères
Bloc 0
10
25
21/07/2015
30
Bloc 1
40
45
© Robert Godin. Tous droits réservés.
28
Cas de fusion en cascade (suite) :
réduction de la hauteur
Violation de la
règle du minimum
Bloc 7
40
Bloc 2
25
Bloc 6
50
Fusion des deux frères
Bloc 0
10
25
30
Bloc 2
40
Bloc 0
10
25
21/07/2015
30
Bloc 1
40
45
Bloc 5
50
60
70
Bloc 1
40
45
Bloc 5
50
60
70
50
© Robert Godin. Tous droits réservés.
29
8.1.3 Arbre-B
Clés non dupliquées
Ordre <
Hauteur >
Bloc 6
40
Arbre-B
Bloc 2
25
Bloc 0
10
20
Bloc 5
60
Bloc 3
30
Bloc 1
50
53
Bloc 2
25
Bloc 0
10
20
21/07/2015
Bloc 3
25
30
40
Bloc 4
70
Arbre-B+
60
Bloc 1
40
50
© Robert Godin. Tous droits réservés.
53
Bloc 4
60
70
30
8.1.4 Autres variantes
du concept d'arbre-B
Redistribuer plutôt que diviser
–
Diviser deux en trois
–
clés de taille variable
Arbre B préfixe
–
Arbre-B*
Ordre variable
–
occupation moyenne 67% => 86%
comprimer les clés diminue la hauteur
Algorithme de chargement en lot
–
–
21/07/2015
feuilles consécutives
taux de remplissage prédéterminé
© Robert Godin. Tous droits réservés.
31
Cas d'une clé non unique
Arbre-B+ primaire sur une clé non unique
–
Arbre B+ secondaire avec clés répétées
–
clé d ’accès + pointeur (unique)
Arbre B+ secondaire avec collection de références
–
IDE difficile
listes inversées dans les feuilles
Arbre B+ secondaire avec référence à une collection d'enregistrements
–
Index groupant (“ clustering index ”)
Arbre B+ secondaire avec référence à collection de références
–
organisation primaire par grappe et index secondaire sur même clé
listes inversées à part
Arbre B+ avec vecteurs booléens
–
21/07/2015
index « bitmap »
© Robert Godin. Tous droits réservés.
32
8.1.5 Réalisation de l'accès par IDE à l'aide
d'une organisation par index
Index primaire
–
–
IDE = id_fichier, valeur de la clé unique
nécessite le passage par l ’index
IDE logique
–
–
21/07/2015
index secondaire
clé d ’index = IDE
© Robert Godin. Tous droits réservés.
33
8.1.6 Sélection par
intervalle ou préfixe
Arbre B+
–
–
recherche de la valeur minimale
parcours des feuilles jusqu ’à la valeur maximale
...
...
...
...
...
...
...
Feuilles à transférer
21/07/2015
© Robert Godin. Tous droits réservés.
34
8.1.7 Index sur une
clé composée
Clé composée ~ clé simple formée de la
concaténation des champs
Sélection par préfixe de la clé composée
21/07/2015
© Robert Godin. Tous droits réservés.
35
8.1.8 Index bitmap
indice noPermis
sexe
couleurYeux
bitmap
sexe = M
bitmap
sexe = F
1
2
3
4
5
6
7
8
M
M
F
M
F
M
F
F
brun
bleu
brun
brun
brun
rouge
bleu
brun
1
1
0
1
0
1
0
0
0
0
1
0
1
0
1
1
G111
G555
G222
G888
G777
G666
G333
G444
bitmap
couleurYeux
= bleu
0
1
0
0
0
0
1
0
bitmap
couleurYeux
= brun
1
0
1
1
1
0
0
1
bitmap
couleurYeux
= rouge
0
0
0
0
0
1
0
0
couleurYeux = brun et sexe = M
–
21/07/2015
10111001 ET 11010100 = 10010000
© Robert Godin. Tous droits réservés.
36
Arbre digital (trie)
8.2
Chaque niveau : position d'un symbole de la clé vue comme une
séquence de symboles s1s2…sn
A
A
B
C
A
C
B
«A»
A
B
«AA»
«BA»
«ACA»
21/07/2015
«C»
«BB»
«ACB»
© Robert Godin. Tous droits réservés.
37
8.3 Hachage
Hachage ou adressage dispersé (hashing)
Fonction h(clé de hachage) => l'adresse d'un paquet
Fichier = tableau de paquets (bucket)
–
~ARRAY paquet [0..TH-1]
–
TH : taille de l'espace d'adressage primaire
Habituellement paquet = bloc
Pas d ’index à traverser : O(1) en meilleur cas
Sélection par égalité (pas intervalle)
21/07/2015
© Robert Godin. Tous droits réservés.
38
8.3.1 Hachage statique
0
60
Erable argenté
15.99
90
Pommier
25.99
81
Catalpa
25.99
70
Herbe à puce
10.99
40
Epinette bleue
25.99
10
Cèdre en boule
10.99
20
Sapin
12.99
50
Chêne
22.99
95
Génévrier
15.99
80
Poirier
26.99
clé = 10
h(10) = 10 MOD 3 = 1
1
2
21/07/2015
© Robert Godin. Tous droits réservés.
39
8.3.1.1 Problème de
débordement dû aux collisions
Méthode de résolution des collisions
–
Adressage ouvert
–
0
1
2
AC+1, AC+2,....., n-1, 0, 1, ....AC-1
Chaînage
60
Erable argenté
15.99
90
Pommier
25.99
81
Catalpa
25.99
70
Herbe à puce
10.99
40
Epinette bleue
25.99
10
Cèdre en boule
10.99
43
Magnolia
28.99
20
Sapin
12.99
50
Chêne
22.99
95
Génévrier
15.99
80
Poirier
26.99
21/07/2015
52
Pin
© Robert Godin. Tous droits réservés.
18.99
40
Fonction de hachage
Répartition uniforme des clés dans [0..TH-1]
–
h(clé) = clé MOD TH
TH
–
h(clé) = clé p MOD TH
TH
–
et p sont relativement premiers
h(clé) = (∑ si) MOD TH
si
est premier
est une sous-séquence des bits de la clé
Clé non numérique
–
21/07/2015
représentation binaire vue comme un entier
© Robert Godin. Tous droits réservés.
41
Hachage vs indexage
O(1) en meilleur cas vs O(log(N))
Pas d ’espace supplémentaire d ’index
Gaspillage d ’espace si TH trop >
Performance dégradée si TH trop <
Gestion plus délicate
–
–
déterminer h et TH
maintenance : réorganisations
Clé non numérique ?
–
21/07/2015
représentation binaire vue comme un entier
© Robert Godin. Tous droits réservés.
42
Calcul d ’espace
Heuristique : Taux d ’occupation moyen ~ 80%
TauxOccupation = N/(TH FB) 0.8
Taux de débordement moyen sous distribution uniforme
–
[Merrett, 1984 #217] :
–
–
–
21/07/2015
FB = 1
FB = 10
FB = 100
~ 30%
~ 5%
~1%
© Robert Godin. Tous droits réservés.
43
8.3.1.2 Fonction de hachage
préservant la relation d'ordre
(tidy functions)
clé1 < clé2 h(clé1) < h(clé2)
Connaissances préalables au sujet de la
distribution des clés
21/07/2015
© Robert Godin. Tous droits réservés.
44
8.3.2 Hachage dynamique
Adaptation de TH et h aux variations du
volume des données
~ arbre-B
–
division et fusion de paquets (blocs)
Deux variantes de base
–
–
21/07/2015
linéaire
extensible
© Robert Godin. Tous droits réservés.
45
8.3.2.1
Adaptation de TH
–
Hachage linéaire
suite d ’expansions
Début de dième expansion, d {0, 1, …}
–
–
d=2
TH passera de 2d à 2d+1
adresse du paquet : hd(clé) = bd-1, bd-2,…, b1, b0
101002 111012 110102 011112
000012
110112
002
012
102
112
p
21/07/2015
© Robert Godin. Tous droits réservés.
46
Insertion de h(clé) = 101012
101002 111012 110102 011112
000012
110112
002
012
102
112
Bloc #012 déborde
Division du bloc p = #002 (pas #012)
p := p+1
p
Division du bloc 002
101012
0002
FONCTION AdresseLinéaire (clé)
DÉBUT
SI hd(clé) >= p Retourner hd(clé)
SINON
Retourner hd+1(clé) FINSI
FIN
111012 110102 011112 101002
000012
110112
012
102
112
1002
p
Zône primaire
21/07/2015
Zône d'expansion
© Robert Godin. Tous droits réservés.
47
Insertion de h(clé) = 101112
101012
0002
Bloc #112 déborde
111012 110102 011112 101002
000012
110112
012
102
112
1002
p
Division du bloc 012 (p = 012)
101112
000012 110102 011112 101002 101012
110112
111012
0002
0012
102
112
1002
1012
p
21/07/2015
Zône primaire
Zône d'expansion
© Robert Godin. Tous
droits réservés.
48
Insertion de 110002, 110012 et 101102
101112
0002
000012 110102 011112 101002 101012
110112
111012
0012
102
112
1002
1012
p
101112
110002 000012 110102 011112 101002 101012
110012 101102 110112
111012
0002
0012
102
112
1002
1012
p
Zône primaire
21/07/2015
Zône d'expansion
© Robert Godin. Tous droits réservés.
49
Insertion de 100102
101112
Bloc #102 déborde et est divisé
110002 000012 110102 011112 101002 101012
110012 101102 110112
111012
0002
0012
102
112
1002
1012
p
Division du bloc 102 (p = 102)
101112
110002 000012 110102 011112 101002 101012 101102
110012 100102 110112
111012
0002
0012
0102
112
1002
1012
1102
p
21/07/2015
© Robert Godin. Tous droits réservés.
Zône primaire
Zône d'expansion
50
Insertion de 011012
101112
Bloc #1012 déborde
–
110002 000012 110102 011112 101002 101012 101102
110012 100102 110112
111012
0002
0012
0102
112
1002
1012
1102
p
zone d ’expansion !
Fin de l ’expansion
p := 0
d := d+1 = 3
Division du bloc 112
011012
d=3
110002 000012 110102 110112 101002 101012 101102 011112
110012 100102
111012
101112
0002
0012
0102
0112
1002
1012
1102
1112
p
21/07/2015
© Robert Godin. Tous droits réservés.
Zone primaire
51
8.3.2.1.1 Variantes du
hachage linéaire
Variante du contrôle de la division
–
algorithme de base
–
division/fusion contrôlée par taux d ’occupation
Variante de gestion des débordements
–
hachage linéaire au niveau suivant
Variante de division
–
–
biais dans les chaînages (à droite de p)
expansions partielles
–
débordement => division : taux d ’occupation ~ 60%
diviser n blocs en n+1
fonction de hachage exponentielle
Gestion de l ’espace d ’adressage primaire
–
21/07/2015
préserver la contiguïté de l ’espace malgré expansions ?
© Robert Godin. Tous droits réservés.
52
8.3.2.2 Hachage extensible
Ajoute un niveau d ’indirection
Répertoire d'adresses de paquets
–
–
espace supplémentaire
accès disque supplémentaire pour répertoire
antémémoire
Bloc qui déborde est divisé
–
–
21/07/2015
pas de dégradation due au chaînage
pire cas : 2 transferts
© Robert Godin. Tous droits réservés.
53
Analogie avec arbre digital
Répertoire vu comme arbre digital
Chemin = suffixe
0
0
101002
110002
Bloc 0
1
1
010102
011102
Bloc 2
100012
111012
Bloc 1
Pas de lien direct entre suffixe et #bloc
21/07/2015
© Robert Godin. Tous droits réservés.
54
Insertion de h(clé) = 100112
Débordement et division du bloc #1
Utilisation d ’un bit de plus
0
0
1
100012
111012
Bloc 1
1
101002
110002
Bloc 0
010102
011102
Bloc 2
0
0
101002
110002
Bloc 0
21/07/2015
1
1
010102
011102
Bloc 2
© Robert Godin. Tous droits réservés.
0
100012
111012
Bloc 1
1
100112
Bloc 3
55
«Remplacer» l'arbre digital
par un répertoire
« Compléter » l ’arbre
0
0
1
1
101002
110002
Bloc 0
010102
011102
Bloc 2
100012
111012
Bloc 1
0
0
101002
110002
Bloc 0
21/07/2015
1
1
010102
011102
Bloc 2
© Robert Godin. Tous droits réservés.
0
1
100012
111012
Bloc 1
56
Arbre digital => un répertoire
Bijection chemin <-> indice
0
0
1
101002
110002
Bloc 0
Profondeur
globale du
répertoire (d)
Profondeur
locale du
bloc
0
010102
011102
Bloc 2
002
1
100012
111012
Bloc 1
012
102
Sens
de
lecture
des
indices
112
2
101002
110002
Bloc 0
2
21/07/2015
1
100012
111012
Bloc 1
1
010102
011102
Bloc 2
2
© Robert Godin. Tous droits réservés.
57
Insertion de h(clé) = 100112
avec répertoire
Profondeur
globale du
répertoire (d)
002
101002
110002
Bloc 0
2
Profondeur
locale du
bloc
100012
111012
Bloc 1
1
002
112
010102
011102
Bloc 2
2
012
102
112
2
101002
110002
Bloc 0
2
21/07/2015
102
2
Profondeur
locale du
bloc
Profondeur
globale du
répertoire (d)
012
100012
111012
Bloc 1
2
© Robert Godin. Tous droits réservés.
010102
011102
Bloc 2
2
2
100112
Bloc 3
58
Cas de dédoublement de répertoire :
insertion de h(clé) = 101102
0
0
100012
111012
Bloc 1
1
101002
110002
Bloc 0
Profondeur
globale du
répertoire (d)
1
010102
011102
Bloc 2
101002
110002
Bloc 0
2
1
100012
111012
Bloc 1
1
101002
110002
Bloc 0
0
1
010102
0
0
1
1
101002
110002
Bloc 0
21/07/2015
0
010102
Bloc 2
112
100012
111012
Bloc 1
1
010102
011102
Bloc 2
2
1
0002
0
102
Profondeur locale dépasse
profondeur globale
011102
101102
Bloc 3
Bloc 2
012
2
Profondeur
locale du
bloc
0
0
002
0
1
011102
101102
Bloc 3
0
1
1
0
100012
111012
Bloc 1
0012
0102
0112
1002
1012
1102
1112
3
1
101002
110002
Bloc 0
2
100012
111012
Bloc 1
1
3
010102
Bloc 2
© Robert Godin. Tous droits réservés.
011102
101102
Bloc 3
3
59
Hachage extensible (suite)
Occupation
–
d ’espace
comportement oscillatoire assez prononcé
entre
.53 et .94
moyenne : ln 2 = .69
Variation
–
–
21/07/2015
contrôle de la division par taux
d ’occupation
gestion des débordements
© Robert Godin. Tous droits réservés.
60
8.3.3 Réalisation de l'accès
par IDE avec le hachage
Hachage statique
–
–
bloc d ’ancrage fixe
IDE = idFichier, #blocAncrage, #séquence
HASH
–
CLUSTER d ’Oracle
applicable dans le cas non unique
Cas d ’une clé de hachage unique
–
–
21/07/2015
IDE = id_fichier, valeur de la clé unique
nécessaire avec hachage dynamique
© Robert Godin. Tous droits réservés.
61
8.3.4 Hachage sur une clé
non unique et effet de grappe
Regroupement des mêmes valeurs de clé
–
v1 = v2 h(v1) = h(v2)
0
h(taille) = taille MOD 3
1
2
21/07/2015
taille
20
Sapin
12.99
15
52
Pin
18.99
15
90
Pommier
25.99
6
80
Poirier
26.99
6
81
Catalpa
25.99
15
40
Epinette bleue
25.99
15
70
Herbe à puce
10.99
1
95
Génévrier
15.99
1
10
Cèdre en boule
10.99
1
50
Chêne
22.99
20
60
Erable argenté
15.99
20
43
Magnolia
28.99
5
© Robert Godin. Tous droits réservés.
62
8.3.5 Hachage secondaire
Hachage sur
–
21/07/2015
(clé de hachage, IDE)
© Robert Godin. Tous droits réservés.
63
8.4 Tableau comparatif des
organisations
Critère
Hachage
statique
Sélection par égalité sur O(N/FB)
Meilleur
cas
clé unique
Cas
moyen :
:O(1)
O(N/FB/2)
Pire
cas
:
O(N/FB)
Sélection par égalité sur O(N/FB)
O(log (Card(clé))+ Approche
par Meilleur cas :
clé non unique
Sel/FB)
duplication
O(Sel/FB)
O(log (N)+
Pire
cas
:
Sel)
O(N/FB)
Sélection par intervalle O(N/FB)
O(log (Card(clé))+ O(log (N)+
O(N/FB)
Sel/FB)
Sel)
Itération sérielle
O(N/FB)
O(N)
O(N/FB)
Itération séquentielle
O(tri)
O(N/FB)
O(N)
O(tri)
Insertion/suppression O(1)
O(log N)
O(log N)
Meilleur
cas
:O(1)
Pire
cas
:
O(N/FB)
Taux
d'occupation Maximal
En moyennne : Ajouter
à ~80%
mémoire secondaire
approche 100%
66% (2/3)
l'organisation
À ajuster
primaire
Pire cas non
borné
Autres considérations
21/07/2015
Sériel
Arbre-B+
primaire
O(log (N))
Arbre-B+
secondaire
O(log (N))
Hachage
dynamique
Meilleur
cas
:O(1)
Pire
cas
:
O(N/FB)
Meilleur cas :
O(Sel/FB)
Pire
cas
:
O(N/FB)
O(N/FB)
O(N/FB)
O(tri)
Meilleur
cas
:O(1)
Pire
cas
:
O(N/FB)
~69% (ln 2)
Peut augmenter
au prix d'une
diminution de
performance.
Support difficile Peut y avoir Distribution
Disponibilité
de l'accès par plusieurs index des clés par restreinte
IDE et donc des secondaires sur fonction
de
organisations
la même table
hachage ?
secondaires
Problème avec
tables volatiles
Stress du DBA
© Robert Godin. Tous droits réservés.
64