Title: Indexes
1Indexes à Arbres et Indexes à Hachage
- Sections sélectionnées du Chapitre 10
2Introduction
- Rappel des 3 alternatives dentrées des données
k - un enregistrement de données avec une valeur de
clé k - une paire ltk, ridgt
- une paire ltk, liste de ridsgt
- Les indexes à arbres supportent à la fois la
recherche des plages de valeurs (range
search) ainsi que les recherches degalités
(equality search). - ISAM structure statique B tree dynamique,
sajuste gracieusement aux insertions et
effacements. - Indexes à Hachage meilleurs pour les recherches
dégalité ne peuvent supporter les recherches
des valeurs des plages.
3Intuition Derrière les Indexes à Arbres
- Trouvez tous les étudiants avec un gpa gt 3.0
- Si les données sont stockées dans un fichier
trié, faire la recherche binaire pour trouver le
premier de ces étudiants, et de là faire un
scannage pour trouver les autres. - Le coût de la recherche binaire peut être
prohibitif ! Il est en effet proportionnel au
de pages puisées. - Solution Créer un fichier dindexes
Fichier dindexes
kN
k2
k1
Page N
Fichier de données
Page 1
Page 3
Page 2
- Une recherche binaire est faisable sur de petits
fichiers dindexes!
4ISAM
Entrée dindex
P
K
P
K
P
P
K
m
0
1
2
1
m
2
- Le fichier dindexes peut être très large. On
peut cependant appliquer lidée de fichier
dindexes de manière répétée!
Pages
internes
Pages
feuilles
Pages primaires
- Les pages feuilles contiennent les entrées des
données.
5ISAM (Suite)
- Création du fichier les feuilles (pages de
données) sont allouées séquentiellement et triées
selon la clé de recherche ensuite les pages de
débordement sont crées. - Entrées dindexes ltvaleur de la clé, page idgt
orientent la recherche vers les entrées de
données se trouvant dans les pages feuilles. - Recherche Commence à la racine compare des
clés pour aller vers la feuille appropriée.
Coût log F N F entrées/pg index, N
feuilles - Insertion Trouver la feuille à la quelle
appartient lentrée de donnée et ly mettre. - Effacement Trouver et enlever lentrée de la
feuille désaffecter une page de débordement vide.
Pages de données
Pages des indexes
Pages de débordement
- Structure statique les changements naffectent
que les feuilles.
6Exemple dun Arbre ISAM
- Chaque nœud peut contenir 2 entrées il ny a pas
besoin de pointeurs liant les pages entre elles
(Pourquoi ???)
7Après lInsertion de 23, 48, 41, 42 ...
Racine
40
Pages de lindex
20
33
51
63
Feuilles
primaires
46
55
10
15
20
27
33
37
40
51
97
63
41
48
23
Pages de
débordement
42
8 ... Ensuite Effacement de 42, 51, 97
Racine
40
20
33
51
63
46
55
10
15
20
27
33
37
40
63
41
48
23
- Notez que 51 apparaît au niveau de la page de
lindex, - mais pas dans la feuille!
9Arbre B LIndex le plus Usuel
- Insertion/effacement avec coût log F N Garde la
hauteur balancée. (F fanout, N
feuilles) - Taux doccupation minimum de 50(sauf pour la
racine). Chaque nœud contient d lt m lt 2d
entrées. Le paramètre d est appelé lordre de
larbre. - Supporte efficacement les recherches des plages
de valeurs et les recherches dégalités.
10Exemple dArbre B
- La recherche commence à la racine et les
comparaisons des clés lorientent vers une page
(similaire à la méthode ISAM). - Recherchez 5, 15, , toutes les entrées de
données gt 24, ...
Racine
17
24
30
13
39
3
5
19
20
22
24
27
38
2
7
14
16
29
33
34
11Arbre B en Pratique
- Ordre typique 100. Remplissage typique 67.
- Sortance (fanout) moyenne 133
- Capacités typiques
- Hauteur 4 1334 312,900,700 enreg.s
- Hauteur 3 1333 2,352,637 enreg.s
- Les niveaux supérieurs de larbre peuvent souvent
tenir en mémoire principale (buffer pool) - Niveau 1 1 page 8 Kbytes
- Niveau 2 133 pages 1 Mbyte
- Niveau 3 17,689 pages 133 MBytes
12Insertion dune Entrée de Données
- Trouver la feuille appropriée L.
- Mettre lentrée de données dans L.
- Si L a assez despace, fin!
- Sinon, on doit partager L (en L et un nouveau
nœud L2) - Redistribuer les entrées de manière égale, copier
la clé du milieu vers le haut. - Insérer lentrée dindex pointant vers L2 dans le
parent de L. - Ceci peut arriver de manière récursive
- Pour partager nœud dindex, redistribuer les
entrées de manière égale, mais pousser la clé du
milieu vers le haut. (Contrastez ceci avec le
partage des feuilles !!) - Les partages font croître larbre le partage de
la racine augmente sa hauteur. - Croissance de larbre devient plus large ou d
un niveau plus élevé à la racine.
13Insertion de 8 dans lExemple
- Veuillez noter la différence entre copier vers le
haut et pousser vers le haut. (Pourquoi fait-on
cette différence????)
Entrée à insérer dans le nœud parent.
(Notez que 5 est copié vers le haut et
5
continue dapparaître dans la feuille.)
3
5
2
7
8
napparaît quune fois dans lindex.
14Exemple dArbre B Après lInsertion de 8
Racine
17
24
30
13
5
2
3
39
19
20
22
24
27
38
7
5
8
14
16
29
33
34
- La racine a été partagée doù augmentation de
la hauteur.
- En fait, nous pouvons redistribuer ici au lieu
de partager - cependant cela nest pas usuel dans la
pratique.
15Effacement dune Entrée de Données
- Commencer à la racine, trouver la feuille L Ã
laquelle lentrée appartient. - Enlever lentrée.
- Si L est au moins à moitié vide, fin!
- Sinon L a seulement d-1 entrées,
- Essayer de redistribuer, empruntant des cousins .
- Sinon, fusionner L et un cousin.
- Si une fusion a lieu, on doit effacer lentrée
(dindexe) pointant (vers L ou le cousin) Ã
partir du parent de L. - La fusion peut se répercuter jusquà la racine,
décroissant ainsi la hauteur de larbre.
16Notre Arbre Après lInsertion de 8, Suivie de
lEffacement de 19 et 20 ...
Racine
17
27
30
13
5
2
3
39
38
7
5
8
22
24
27
29
14
16
33
34
- Effacer 19 est facile.
- Effacer 20 est fait via une redistribution.
Noter comment la clé du milieu est copiée vers le
haut après la redistribution.
17 ... Et Ensuite Après lEffacement de 24
- On doit fusionner.
- A droite, on fait un changement dentrée
dindex. - Ci bas, on tire une entrée dindex vers le bas.
30
39
22
27
38
29
33
34
Racine
13
5
30
17
3
39
2
7
22
38
5
8
27
33
34
14
16
29
18Exemple de Redistribution Interne
- A lopposé du cas précédant, ici on peut
redistribuer une entrée de lenfant gauche de la
racine vers lenfant droit.
Racine
22
30
17
20
13
5
19Après la Redistribution
- Intuitivement, les entrées sont redistribuées en
poussant lentrée partageante vers le noeud
parent. - Il suffit de redistribuer lentrée dindex avec
clé 20 on a aussi redistribué 17 pour
illustration.
Root
17
13
5
30
22
20
39
7
5
8
2
3
38
17
18
33
34
22
27
29
20
21
14
16
20Chargement en Vrac dun Arbre B
- Si lon a une large collection denreg.s et que
lon veut créer un indexe à arbre B avec une clé
donnée, le faire enregistrement par
enregistrement est très inefficace. - Solution Bulk Loading (chargement en vrac).
- Initialisation
- Trier toutes les entrées de données et les
diviser en page - créer une page racine vide et
- insérer un pointeur de la racine vers la 1ère
page des données.
Pages dentrées de données triées non encore
mises dans larbre B
Racine
21Chargement en Vrac (Suite)
- Les entrées dindex pour les feuilles sont
toujours créées dans la page dindex la plus Ã
droite située juste au dessus du niveau des
feuilles. Si cette dernière est pleine, elle est
partagée. (Ce processus peut se répéter
récursivement
Racine
10
20
Pages de données
35
23
12
6
à mettre sur larbre
3
6
9
10
11
12
13
23
31
36
38
41
44
4
20
22
35
Racine
20
10
35
6
23
12
38
3
6
9
10
11
12
13
23
31
36
38
41
44
4
20
22
35
22Résumé
- Index en arbre ISAM, arbres B
- ISAM est une structure statique
- Seules les feuilles sont modifiées pages de
débordement nécessaires - Défaut chaînes de débordements
- Arbres B est une structure dynamique.
- Insertion et effacement laissent larbre balancé
- coût de log F N
- Pas de chaînes de débordement
- Chargement en vrac des arbres B