Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parConstance Audet Modifié depuis plus de 9 années
1
Ali walid A-2002 Plan: Fichier d’organisation séquentielle indexée (index statique)... 1 – Introduction 2 - La technique de l’accès indexé : 2 – 1 - Les index primaires A) Présentation : B) Insertions et suppressions d’enregistrements : - INSERTION - SUPPRESSION 2 – 2 - Les index de groupement (‘clustering’) : A) Présentation : B) Insertion et suppression d’enregistrements : 2 – 3 - Index secondaires : A) CAS D’UN INDEX SECONDAIRE SUR UN CHAMPS CLÉ B) CAS D’UN INDEX SECONDAIRE SUR UN CHAMPS NON CLÉ : 2 – 4 - Synthèse des types d’index précédents : Ali walid A-2002
2
Plan: Fichier d’organisation séquentielle indexée (index statique)... 2 - 5 - Index multi-niveaux : A) Présentation : B) Index primaire à 2 niveaux : C) Synthèse sur les index multi-niveaux : 2 – 6 - Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method) Inconvénients majeurs : Structure et utilisation d’un index ISAM : Utilisation de l’index (recherche d’un enregistrement) Gestion des débordements (en cas d’insertion) : Suppression d’enregistrements (Réduction) : Ali walid A-2002
3
L es inconvénients des fichiers d’organisations directe... La technique du hashing: Technique computationnelle pour organiser un fichier (car c’est une technique sur laquelle on se base sur le calcul d’adresse de l’enregistrement à partir de la valeur de sa clé en utilisant une fonction de hashing). Les enregistrements dans un fichier sont organisés de manière directe peuvent être retrouvé rapidement. Inconvénient de l’organisation directe: Les enregistrements ne peuvent pas être traités par ordre de leurs créations ou par l’ordre des valeurs de leurs clés. On remarque que: * Pas d’exploitation séquentielle de ce type de fichiers (selon les valeurs de cette clé). * Technique d’accès = fonction de hashing calculée à partir de l’identifiant d’un enregistrement. * Les fichiers à accès directe sont utilisés souvent lorsque les traitements reposent sur la recherche d’enregistrements de valeurs de clé donnée => Le mode d’organisation direct (par fonction de hashing est préférable. Ali walid A-2002
4
Les fichier d’organisation séquentielle indexée... Dans le cas des fichiers d’organisation séquentielle indexée (une autre forme d’organisation qui nous permet un accès direct) on remarque : * L’existence d’un champ d’indexation permet l’exploitation de ce type de fichiers suivant deux modes possibles d’accès: * Séquentiel (déjà vu dans la séance qui traite les fichiers séquentiels) * Indexé (présente séance) * La technique d’accès indexé est basée sur l’utilisation d’une structure de données ( qui est appelée index) couplée et stockée sur disque avec le fichier de données associé. Remarque : Un fichier d’organisation indexée (mode d’organisation) peut être exploité séquentiellement (technique d’accès) par un programme d’application P1 et de façon indexée (autre technique d’accès) par un autre programme P2. Ali walid A-2002
5
La technique d’accès indexé... Les fichiers index peuvent être comparés à l’index du livre ou à sa table de matière. Donc, :si on fait l’analogie avec un livre, on a: - table des matières = {(thème, numéro de page)} - index d’un fichier = {(valeur de clé, pointeur sur un bloc)} L’indexation est une technique d’organisation de données pour accéder aux enregistrements dans un fichier. Dans cette technique, le fichier de données (fichier principal) est décrit par un ou plusieurs fichiers appelé(s) index. Un index peut être intégré à un fichier de données ou constituer lui-même un propre fichier séparé. But: Accélérer la recherche d’enregistrements en partitionnant le fichier de données sur la base des valeur d’une clé pré-définie (rubrique ou champ d’indexation). Chaque entrée d’un index contient la valeur d’un champ d’indexation et une liste de pointeurs sur tous les blocs disque contenant un enregistrement dont le champ d’indexation possède cette valeur. L’espace requis pour stocker le fichier index dépend étroitement de la nature du fichier à indexer, du type d’index. L’index est trié, ce qui permet une recherche dichotomique d’une valeur de champ d’indexation. Ali walid A-2002
6
Critères de classification des techniques d’indexation... On peut classifier les techniques d’indexation en se basant sur 4 critères possibles : - Champ d’indexation : Est ce que ce champs est l’identifiant de l’enregistrement ou non (ça veut dire, est ce que ce champs peut supporter des duplications au niveau de ses valeurs). - Évolution de l’index : Est-ce que l’index évolue rapidement ou non. - Niveaux d’index : Est-ce que l’inde est à un seul niveau ou à plusieurs niveaux. - Densité de l’index : Est-ce qu’un entrée index est reliée à chaque enregistrement du fichier de données ou à un bloc ou une portion de ce fichier. Ali walid A-2002
7
Critères de classification des techniques d’indexation.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordonnées (valeurs doubles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire Ali walid A-2002
8
Critères de classification des techniques d’indexation.... Niveau d’index Densité de l’index Index mono-niveaux 1 seul niveau Index multi-niveaux Plusieurs niveaux Index dense Pointeur enregistrement Index non dense Pointeur bloc Ali walid A-2002
9
Critères de classification des techniques d’indexation.... Évolution Index statique Utilisation d’une zone de débordement pour les insertions de nouveaux enregistrements (système ISAM d’IBM) Index dynamique Adaptation dynamique de l’index à chaque insertion d’un nouvel enregistrements (système VSAM d’IBM) Ali walid A-2002
10
Les index primaires.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordonnées (valeurs doubles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire Ali walid A-2002
11
Les index primaires... On appelle index primaire un fichier ordonné constitué d’enregistrements de longueur fixe ayant chacun 2 champs : 1. Champ de même type que la clé primaire (l’identifiant) du fichier de données 2. Pointeur sur un bloc (i.e. adresse de bloc) Donc on remarque qu’il y a autant d’entrées dans l’index que de blocs dans le fichier de données (i.e. une entrée par bloc). Chaque entrée dans l’index contient une valeur de clé primaire correspondant au premier enregistrement d’un bloc ainsi qu’un pointeur sur ce dernier. Par convention : = valeurs des 2 champs correspondants à la ie entrée de l’index Ali walid A-2002
12
Index primaire: Exemple... On suppose pour ce fichier de données que le nom est l’identifiant, donc, on ne peut pas trouver des enregistrement qui ont la même valeur de ce champ : Ali walid A-2002
13
Index primaire: Exemple... Donc on a : Le nombre d’entrées de l’index = nombre de blocs du fichier de données. Par exemple, les trois premières entrées de l’index précédent sont : Le premier enregistrement de chaque bloc dans le fichier de données s’appelle enregistrement d’ancrage (dans certains cas cet enregistrement peut être le dernier du bloc plutôt que le premier). Un index primaire est un index non dense car il contient une entrée par bloc et non une entrée par enregistrement (dans ce dernier cas l’index est dit dense). Ali walid A-2002
14
Index primaire: Remarques... Le fichier index nécessite moins de blocs pour son stockage que le fichier de données pour 2 raisons essentielles : 1. Nombre d’entrées dans l’index < nombre d’enregistrements du fichier de données (puisque une entrée par bloc) 2. Taille (entrée index) < taille (enregistrement) Donc Þ La recherche dichotomique sur le fichier index nécessite moins d’accès bloc que si elle était réalisée directement sur le fichier de données. Ce qui nous motive à faire une recherche dichotomique sur le fichier d’index est le fait qu’il est trié.
15
Ali walid A-2002 Principe de la recherche dichotomique... La recherche dichotomique d'un élément dans un tableau trié consiste à découper le tableau en deux sous-tableaux, sélectionner le sous-tableau susceptible de contenir l'élément cherché (en tenant compte de la valeur des bornes), puis itérer ce processus sur le tableau sélectionné jusqu'à l'obtention d'un sous-tableau ne contenant qu'un seul élément. Ainsi, la recherche de l'élément 7 dans le tableau contenant les données (1,2,3,4,7,10,17,19,20,31) se fera comme suit (le sous-tableau sélectionné est souligné à chaque étape): Etape 1: (1,2,3,4,7,10,17,19,20,31) indices du sous-tableau: 1..10 Etape 2: (1,2,3,4,7,10,17,19,20,31) indices du sous-tableau: 1..5 Etape 3: (1,2,3,4,7,10,17,19,20,31) indices du sous-tableau: 4..5 Etape 4: (1,2,3,4,7,10,17,19,20,31) indices du sous-tableau: 5..5 Cette méthode de recherche permet d'atteindre le but en log2(n) étapes, n étant le nombre d'éléments du tableau.
16
Ali walid A-2002 Recherche dichotomique dans le fichier principal... Hypothèses et notations : 1. n = nombre de blocs du fichier de données 2. Les valeurs de clé sont triées par ordre croissant 3. Problème :Recherche de l’enregistrement dont la valeur de clé est k 4. k’(i) = valeur de clé du dernier enregistrement du bloc 5. k(i) = valeur de clé du premier enregistrement du bloc i
17
Ali walid A-2002 Recherche dichotomique dans le fichier principal... Algorithme de recherche dichotomique : Début l<- 1 ; Trouvé <- faux ; u n ; Tant que (u > l) et (trouve = faux) Faire i (l + u) / 2 ;(* division entière *) Si k < k(i) alors u i - 1 Sinon Si k > k’(i) alors l i + 1 Sinon Si enregistrement de clé K dans Bloc i alors trouvé vrai Sinon Aller à Non_OK Fin si Fin faire Si (trouve = Faux) et (enregistrement de clé k dans bloc l) Alors trouvé vrai ; Fin si Si trouvé alors Aller à OK Sinon aller à Non_OK Fin si Fin
18
Ali walid A-2002 Exmeple: Nombre d’accès à un bloc sans index... Soit un fichier de données ordonné : - De r = 30 000 enregistrements de longueur fixe r = 100 octets - Stockés sur des blocs de 1 024 octets - Dont le facteur de blocage fb = 1 024/ 100 = 10 Donc le nombre de blocs nécessaires pour le stockage de ce fichier : b = r / fb = 30 000 / 10 = 3 000 blocs Une recherche dichotomique sur le fichier nécessitant environ : Log 2 (b) = Log 2 (30 000) = 12 accès bloc
19
Ali walid A-2002 Recherche dichotomique dans le fichier index... Hypothèses et notations : 1. n = nombre de blocs de l’index primaire 2. Les valeurs de clé sont triées par ordre croissant 3. Problème : identique au 1 er cas 4. k’(i) = valeur de clé du dernier enregistrement du bloc i de l’index 5. k(i) = valeur de clé du premier enregistrement du bloc i de l’index
20
Ali walid A-2002 Recherche dichotomique dans le fichier index... Algorithme de recherche dichotomique Début l 1 ; u n ; Tant que (u > l) Faire i (l + u) / 2 ; (* division entière *) Si K < K(i) alors u i - 1 Sinon Si k > k’(i) alors Si k < k(i + 1) (* accès au bloc i + 1 de l’index *) alors Rechercher le bloc du fichier de données contenant l’enregistrement à partir du bloc i de l’index (*) Sortir de la boucle « Tant que » Sinon l i = 1 Fin si Sinon Rechercher le bloc du fichier de données contenant l’enregistrement à partir du bloc i de l’index (*) Sortir de la boucle « Tant que » Fin si Fin faire Fin
21
Ali walid A-2002 Exmeple: Nombre d’accès à un bloc avec index... Soit un fichier de données ordonné : De r = 30 000 enregistrements de longueur fixe r = 100 octets -Stockés sur des blocs de 1 024 octets - Dont le facteur de blocage fb = 1 024/ 100 = 10 Le nombre de blocs nécessaires pour le stockage de ce fichier : b = r / fb = 30 000 / 10 = 3 000 blocs Rappelons que la recherche dichotomique sur le fichier de données nécessite environ : Log 2 (b) = Log 2 (30 000) = 12 accès bloc. Supposons maintenant que l’on désire construire un index primaire sur ce fichier avec les hypothèses suivantes : La clé primaire du fichier de données occupe 9 octets L’adresse d’un bloc occupe 6 octets Donc la taille de chaque entrée i de l’index : R i = 9 + 6 = 15 octets
22
Ali walid A-2002 Exmeple: Nombre d’accès à un bloc avec index... Le facteur de blocage pour l’index : fb i = 1 024 / Ri = 1 024 / 15 = 68 entrées par bloc Le nombre total d’entrées de l’index : r i = 3 000 (i.e. nombre de blocs du fichier de données) Le nombre de blocs nécessaires pour le stockage de l’index : b i = r i / fb i = 3 000 / 68 = 45 blocs Une recherche dichotomique sur l’index nécessiterait environ : log 2 (b i ) = log 2 (45) = 6 accès bloc Soit au total : 6+1= 7accès bloc (versus 12 sans index) accès au bloc qui contient l’enregistrement dans le fichier de données accès aux blocs de l’index On remarque très bien, le gain énorme en terme d’accès à la mémoire externe en cas de recherche en utilisant un index du fichier.
23
Ali walid A-2002 Insertion et suppressions d’enregistrement... Si le fichier est organisée d’une manière indexée, il doit être maintenu trié, ainsi que son index correspondant. Le problème qui se présente est comment maintenir cet ordre après chaque opération de M.A.J. Ce problème se présente dans le cas de l’insertion de nouveaux enregistrements et dans le cas de suppressions des enregistrement. Dans le cas de la modification ce problème ne se présente pas car on n’autorise pas la modification d’une clé primaire dans un fichier, et on n’oubli pas qu’on indexe selon le champs clé primaire (ou identifiant) des enregistrements du fichier de données principal.
24
Ali walid A-2002 Insertion...Problèmes... Dans le cas de l’insertion d’un nouveau enregistrement, on doit chercher la position d’insertion dans le fichier et déplacer les enregistrements suivant (par rapport à cette position) pour insérer le nouveau enregistrement à cette position. On remarque que : Au niveau du fichier de données : en moyenne, la moitié des enregistrements alors déplacés la moitié du nombre de blocs est donc lue et réécrite Au niveau de l’index : modification de certaines entrées de l’index puisque le déplacement d’enregistrements va entraîner le déplacement des enregistrements d’ancrage de certains blocs Cette solution n’est pas efficace car elle est trop coûteuse en terme d’accès aux blocs d’enregistrements pour les déplacer. On va essayer d’avoir d’autres solutions plus efficaces.
25
Ali walid A-2002 Insertion...solution efficaces... 1. Maintenir un espace libre dans chaque bloc permettant le stockage de nouveaux enregistrements. Mais, lorsque le bloc est plein le même problème se pose à nouveau ! Cette solution n’est pas efficace non plus, mais elle est plus efficace que la première solution. 2. Créer un fichier temporaire de débordements (ou de transactions) non ordonnés dans lequel sont rangés les nouveaux enregistrements à l’ordre de leur création. Périodiquement, ce fichier est fusionné avec le fichier maître lors des réorganisations. Insertion dès lors plus efficace mais au prix d’une plus grande complexité de l’algorithme de recherche, car on va effectuer une recherche dichotomique dans le fichier index et au cas où on ne trouve pas l’enregistrement, on va faire une recherche linéaire dans le fichier de débordement. Lorsque l’application ne nécessite pas les données les plus récentes, le fichier de débordement peut être omis lors d’une recherche 3. Utilisation d’une liste chaînée d’enregistrements en débordement pour chaque bloc (cf. technique de hashing). Dans toutes ces solutions, on doit maintenir le fichier index ordonné aussi.
26
Ali walid A-2002 La suppression... Dans le cas de la suppression des enregistrements le problème moins prononcé si la technique du marquage est utilisée sinon, on aura le même problème que pour une insertion i.e. déplacement d’enregistrements pour combler l’espace libéré par la suppression. La technique du marquage consiste en une suppression logique mais non physique de l’enregistrement avec une réorganisation périodique du fichier pour la récupération de l’espace occupé par les enregistrements logiquement supprimés.
27
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
28
Ali walid A-2002 Les index de groupement (clustering).... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordonnées (valeurs doubles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire
29
Ali walid A-2002 Les index de groupement (clustering)... Un index de groupement ou clustering est un index créé sur un fichier de données ordonné suivant les valeurs d’un champ non clé (champ de groupement) (les valeurs de ce champs peuvent être dupliquées dans le fichier de données). Un index de groupement permet d’accélérer la recherche d’enregistrements possédant une même valeur de clé donnée pour le champ de groupement. Un index de groupement est (comme pour un index primaire) un fichier ordonné dont chaque enregistrement possède deux champs : 1. Champ de même type que le champ de groupement de fichier de données ->une entrée d’index pour chaque valeur distincte du champ d’indexation 2. Pointeur sur un bloc (i.e. adresse de bloc) ->pointeur sur le premier bloc contenant un enregistrement dont la valeur du champ de groupement est égale à celle de l’entrée de l’index Un index de groupement est un exemple d’index non dense puisqu’il possède une entrée pour chaque valeur distincte du champ de groupement et non une entrée pour chaque enregistrement du fichier de données
30
Ali walid A-2002 Les index de groupement (clustering): Exemple... Champ de groupement : numéro de département dans un fichier d’employés (plusieurs employés peuvent travailler dans un même département)
31
Ali walid A-2002 Insertion et suppression... Le problème dû au fait que les enregistrements sont ordonnés. La solution qui est souvent adoptée est la réservation d’un bloc complet pour chaque valeur distincte du champ de groupement. Problème sous-jacent : Cas où plusieurs blocs sont nécessaires pour stocker les enregistrements correspondant à une même valeur du champ de groupement. Dans ce cas la solution est l’allocation de blocs supplémentaires et chaînage de ces derniers (voir figure).
32
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
33
Ali walid A-2002 Les index secondaires.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordonnées (valeurs doubles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire
34
Ali walid A-2002 Les index secondaires... Un index secondaire est un index trié créé sur un fichier de données non ordonné. Comme pour les index « primaire » et de « groupement », un index secondaire est un fichier trié sur la base des valeurs d’un champ non ordonné du fichier de données (champ d’indexation). Ce champs d’indexation peut être le champs clé ou non. Les valeurs du champ d’indexation peuvent être distinctes ou pas. Il peut y avoir plusieurs index secondaires et par conséquent de champs d’indexation pour un même fichier de données.
35
Ali walid A-2002 Les index secondaires (sur un champs clé)... Lorsque les valeurs du champ d’indexation sont distinctes pour chaque enregistrement du fichier de données, ce champ est appelé clé secondaire de ce fichier. donc,on a : Une entrée d’index pour chaque enregistrement du fichier de données Un index secondaire est donc un index dense Un index secondaire est un fichier ordonné dont chaque enregistrement possède deux champs : 1.Champ de même type que le champ d’indexation (i.e. clé secondaire dans le cas considéré ici) du fichier de données Une entrée d’index pour chaque enregistrement du fichier de données 2. Pointeur sur un bloc (i.e. adresse de bloc) Pointeur sur le bloc contenant l’enregistrement dont la valeur du champ d’indexation est identique à celle de l’entrée de l’index Index secondaire = { } Les entrées d’index k(i) sont ordonnées de sorte que la recherche dichotomique peut être utilisée. Par contre, les enregistrements n’étant pas ordonnés sur le fichier de données les enregistrements d’ancrage ne peuvent pas être utilisés (comme pour un index primaire).
36
Ali walid A-2002 Les index secondaires (sur un champs clé)... On remarque que les P(i) sont des adresses de blocs et non d’enregistrements (lecture du bloc physique dans le buffer puis lectures logiques en mémoire pour retrouver l’enregistrement recherché).
37
Ali walid A-2002 Les index secondaires (sur un champs clé)... L’espace nécessaire au stockage d’un index secondaire est plus important que pour un index primaire à cause du plus grand nombre d’entrées de l’index. Cependant, la réduction du temps de recherche d’un enregistrement est beaucoup plus significative que lors de d’utilisation d’un index secondaire (versus primaire). Pourquoi ? -> Sans l’existence d’index secondaire, il faudra effectuer une recherche linéaire sur le fichier de données pour retrouver un enregistrement (puisque les enregistrements ne sont pas triés) -> Pour un index primaire inexistant, une recherche dichotomique est toujours possible sur le fichier de données lui-même (puisque les enregistrements sont triés sur les valeurs de la clé primaire)
38
Ali walid A-2002 Les index secondaires (sur un champs clé): Exemple... Soit le fichier de données qu’on a utilisé dans notre premier exemple dans le cas d’index primaire (non ordonné) De r = 30 000 enregistrements de longueur fixe R = 100 octets Stockés sur des blocs de 1 024 octets Nombre de blocs b = 3 000 (calcul dans l’exemple 1) 1) Une recherche linéaire (i.e. sans index secondaire) nécessiterait en moyenne : b / = 3 000 / 2 = 1 500 accès bloc 2) Supposons maintenant que l’on construise un index secondaire sur un champ non ordonné du fichier avec les hypothèses suivantes : Le champ d’indexation du fichier de données occupe 9 octets L’adresse d’un bloc occupe 6 octets =>Chaque entrée Ri de l’index occupe Ri = 9 + 6 = 15 octets Facteur de blocage fbi pour l’index fbi = 1 024 / ri = 1 024 / 15 = 68 entrées par blocs
39
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
40
Ali walid A-2002 Les index secondaires (sur un champs clé): Exemple... Nombre total d’entrées de l’index = nombre d’enregistrements dans le fichier de données soit 30 000 Nombre de blocs nécessaires pour le stockage de l’index : bi = 30 000 / fbi = 30 000 / 68 = 442 blocs (=> comparer aux 45 blocs nécessaires pour le stockage de l’index primaire de l’exemple 1 !) Une recherche dichotomique sur cet index nécessiterait environ : log2 (bi) = log2 (442) = 9 accès bloc Soit au total : 9 + 1 = 10 accès bloc au lieu de 1 500 ! accès au bloc contenant l’enregistrement recherché dans le fichier de données accès successifs aux blocs de l’index
41
Ali walid A-2002 Les index secondaires (sur un champs non clé)... Dans ce cas, différents enregistrements peuvent avoir la même valeur pour le champ d’indexation. La question qui se pose est :Comment construire un index dans un tel cas de figure ? Pour répondre à cette question, plusieurs options possibles : Option 1 Inclure plusieurs entrées d’index avec la même valeur K(i) (une pour chaque enregistrement de même valeur pour le champ d’indexation) =>Algorithme de recherche dichotomique à modifier en conséquence Option 2 Avoir des enregistrements de longueur variable (dans un fichier index de la forme) : pointeurs sur blocs contenant l’enregistrement dont la valeur du champ d’indexation est K(i) valeur du champ d’indexation Comme pour l’option 1, nécessité de modifier l’algorithme de recherche dichotomique en conséquence.
42
Ali walid A-2002 Les index secondaires (sur un champs non clé)... Option 3 Conserver des enregistrements de longueur fixe pour le fichier index Créer un niveau d’indirection pour la manipulation des pointeurs multiples => création d’un schéma d’index non dense où le pointeur P (i) de l’entrée pointe sur un bloc de pointeurs sur enregistrements
43
Ali walid A-2002 Les index secondaires (sur un champs non clé)... Si certaines valeurs k (i) possèdent trop d’enregistrements pour que les pointeurs correspondants puissent être contenus dans un seul bloc une liste chaînée de blocs peut être utilisée. La recherche d’un enregistrement au moyen de l’index nécessite un accès bloc supplémentaire à cause du niveau d’indirection, mais l’algorithme de recherche dans l’index et surtout d’insertion de nouveaux enregistrements dans le fichier de données dont beaucoup plus simples et efficaces. Remarque : Un index secondaire permet d’avoir un ordre logique des enregistrements au moyen du champ d’indexation: => i.e. si l’accès aux enregistrements se fait dans l’ordre des entrées de l’index secondaire on obtient ces derniers dans l’ordre des valeurs du champ d’indexation
44
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
45
Ali walid A-2002 Synthèse des types d’index... Type de l’index: Champ ordonné Champ non ordonné Champ cléindex primaireindex secondaire (clé) Champ non cléindex de groupementindex secondaire (non clé)
46
Ali walid A-2002 Synthèse des types d’index... Propriété des types d’index: Nombre d’entrées de l’index DensitéEnregistrement d’ancrage PrimaireNombre de blocs dans le fichier de données Non denseOui De groupementNombre de valeurs distinctes du champ d’indexation Non denseOui / Non Secondaire (clé)Nombre d’enregistrements dans le fichier de données DenseNon Secondaire (non clé) Nombre d’enregistrements ou de valeurs distinctes du champ d’indexation Dense ou non dense Non Propriétés des types d’index Types d’index
47
Ali walid A-2002 Synthèse des types d’index.... Niveau d’index Densité de l’index Index mono-niveaux 1 seul niveau Index multi-niveaux Plusieurs niveaux Index dense Pointeur enregistrement Index non dense Pointeur bloc
48
Ali walid A-2002 Index multi-niveaux.... Niveau d’index Densité de l’index Index mono-niveaux 1 seul niveau Index multi-niveaux Plusieurs niveaux Index dense Pointeur enregistrement Index non dense Pointeur bloc
49
Ali walid A-2002 Index multi-niveaux... Dans les types d’index qu’on a vu précédemment, on a supposé plusieurs hypothèse. On a supposé que : Les fichiers index étaient triés. La recherche dichotomique a été utilisée pour accélérer l’accès à un enregistrement du fichier de données sur la vase d’une valeur donnée d’un champ d’indexation La recherche dichotomique nécessite environ (log2 bi) accès bloc pour un index constitué de bi blocs car chaque pas de l’algorithme réduit l’espace de recherche dans l’index par un facteur 2 => Raison du logarithme à base 2
50
Ali walid A-2002 Index multi-niveaux... Dans ce type d’index est dis index mono-niveau ou index a un seul niveau. Car on peut accéder directement aux blocs ou aux enregistrements directement en accédant au fichier index pour récupérer les adresses des blocs ou d’enregistrements. Dans cette section, on va présenter l’index multi-niveau et on va montrer pourquoi il est avantageux par rapport à un index a un seul niveau. L’idée de base des index multi-niveaux est de réduire l’espace de recherche à explorer par un facteur de fbi qui est le facteur de blocage de l’index (le plus souvent : fbi > 2) => l’espace de recherche à chaque pas de l’algorithme diminue beaucoup plus rapidement => le nombre d’accès bloc sera donc approximativement de logfbi (bi) au lieu de log2 (bi) pour une recherche dichotomique (hypothèse fbi > 2)
51
Ali walid A-2002 Index multi-niveaux... Un index multi-niveaux considère le fichier index, appelé le premier niveau d’un index multi-niveaux, comme un fichier ordonné avec une valeur distincte pour chaque k (i). => Il est donc possible de créer un index primaire pour le premier niveau Cet index est alors le second niveau de l’index multi-niveaux (cf. figure suivante). Ca ce n’est qu’un arbre
52
Ali walid A-2002 Index primaire à deux niveaux... Puisque le second niveau est un index primaire, on peut utiliser des enregistrements d’ancrage => Le second niveau possède alors une entrée pour chaque bloc du premier niveau D’autre part, le facteur de blocage fbi du second niveau (et de tous les niveaux suivants) est identique à celui de l’index du premier niveau Pourquoi ? => Car toutes les entrées sont de même taille quel que soit le niveau d’index considéré (champ ‘valeur’ + adresse bloc) Si l’index de premier niveau possède r1 entrées et que son facteur de blocage est fbi = f alors Cet index nécessitera (r1 / f) blocs, ce qui correspondra au nombre d’entrées r2 nécessaires pour le second niveau d’index.
53
Ali walid A-2002 Index multi-niveaux... Le processus ci-dessus, appliqué au premier niveau, peut de la même façon, être appliqué au second niveau Le troisième niveau, qui sera un index primaire pour le second niveau, possédera alors une entrée pour chaque bloc du second niveau, soit : =>r3 = (r2 / f) Remarque: Un index de niveau n n’est nécessaire que lorsque l’index de niveau n - 1 occupe un nombre de blocs b tels que b > 1 Le processus précédent peut donc être répété jusqu’à ce que toutes les entrées d’une section niveau d’index t soient contenues dans un seul bloc Le bloc au tème niveaux d’index correspond alors à l’index de plus haut niveau
54
Ali walid A-2002 Index multi-niveaux... Chaque niveau réduit le nombre d’entrées de l’index du niveau précédent par un facteur approximativement égal à f => La valeur de t peut dès lors être déduite de l’inéquation : r1 / (f) t - 1 >= 1 => Un index multi-niveaux possédant r1 entrées dans son index de premier niveau possédera approximativement t niveaux, où t = logf (r1) + 1 Le schéma d’index multi-niveaux est applicable sur un type d’index quelconque (primaire, de groupement ou secondaire) à deux conditions : 1. L’index de premier niveaux doit posséder des valeurs distinctes pour chaque K (i), et 2. des entrées de longueur fixe
55
Ali walid A-2002 Index multi-niveaux: Exemple... Réduction du nombre d’accès aux bloc par rapport aux index mono-niveaux. Reprenons notre même fichier utilisé dans les exemples d’index primaire et secondaire. Supposons que l’index secondaire (dense) dans l’exemple de l’index secondaire soit transformé en un index multi-niveaux, on aura donc : Facteur de blocage calculé précédemment : fbi = 68 entrées par bloc soit f = fbi = 68 pour l’index multi-niveaux Nombre de blocs pour l’index de premier niveau (voir l’exemple II) b1 = 442 blocs Nombre de blocs pour l’index du second niveau : b2 = ( b1 / f ) = ( 442 / 68 ) = 7 blocs Nombre de blocs pour l’index de troisième niveau : b3 = ( b2 / f ) = ( 7 / 68 ) = 1 bloc =>t = 3
56
Ali walid A-2002 Index multi-niveaux: Exemple... Nombre d’accès bloc pour la recherche d’un enregistrement : t + 1 = 3 + 1 = 4 accès bloc accès au bloc contenant l’enregistrement recherché dans le fichier de données un accès bloc à chaque niveau d’index =>comparaison index primaire (exemple I): 7 accès bloc index secondaire (exemple II):10 accès bloc index primaire 3 niveaux (exemple II):4 accès bloc Dans l’exemple précédent, l’index multi-niveaux utilisé était un index dense (i.e. une entrée de premier niveau pour chaque enregistrement du fichier de données) Dans le cas de l’utilisation d’un index multi-niveaux non dense =>Un bloc du fichier de données doit toujours être lu avant de savoir si l’enregistrement recherché existe (contrairement à un index dense)
57
Ali walid A-2002 Index multi-niveaux... Algortithme de recherche multiniveaux non dense. Notations : t : nombre de niveaux : entrée i du niveau j K : valeur de clé primaire de l’enregistrement recherché Hypothèse : Les enregistrements en zone de débordement sont ignorés
58
Ali walid A-2002 Index multi-niveaux... Algorithme RechercheIndex Début p adresse du bloc de niveau d’index le plus élevé Pour j t ( pas - 1 ) à 1 Faire Lire le bloc d’index (niveau d’index j) d’adresse p ; Rechercher dans ce bloc l’entrée i telle que : Kj (i) K < Kj ( i + 1 ) p pj (i) Fin faire Lire le bloc de données d’adresse p Rechercher dans ce bloc l’enregistrement de clé K Fin
59
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
60
Ali walid A-2002 Synthèse des index multi-niveaux... L’index multi-niveaux est la technique d’indexage la plus performante sur le plan du nombre d’accès bloc lors de la recherche d’un enregistrement de valeur de clé donnée. Cependant, le problème des insertions et suppressions d’enregistrements se pose également dans ce type d’index puisque les fichiers d’index sont triés à tous les différents niveaux d’index =>Solution possible Réservation d’espaces libres dans chaque bloc des fichiers d’index à chaque niveau =>Index multi-niveaux dynamique Implanté le plus souvent à l’aide de structures de données telles que les B-arbres et les B-rbres+
61
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Inconvénients majeurs : 1.Format de stockage (et d’accès) des données très lié aux caractéristiques physiques du périphérique de stockage 2.Pas d’expansion dynamique possible du fichier en cours de mise à jour =>D’où la naissance de VSAM (séance prochaine).
62
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Structure et utilisation d’un index ISAM : Index piste (plus bas niveau) Un cylindre est un ensemble de pistes dont la première (piste 0) contient l’index piste les autres pistes contiennent les enregistrements de données répartis sur la zone primaire ou la zone de débordement cylindre Les enregistrements logiques à l’intérieur des zones primaires sont rangés dans l’ordre séquentiel des valeurs de la clé primaire. Les zones primaires sont également rangées dans ce même ordre (voir précédente) Index cylindre L’index piste contient un pointeur sur chacune des zones primaires ainsi que la valeur de clé maximale de la zone considérée. L’index cylindre pointe sur chacune des pistes de l’index piste et contient la valeur de clé maximale de ce cylindre Index maître (plus haut niveau) Lorsqu’il existe, l’index maître pointe sur l’index cylindre
63
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)....
64
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Lien entre les 3 niveaux d’index
65
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Utilisation de l’index (recherche d’un enregistrement) Soit à rechercher un enregistrement de valeur de clé k les étapes de la recherche sont les suivantes : 1.Recherche dans l’index maître (s’il existe) de la piste de l’index cylindre qui contient cette valeur de clé k => i.e. recherche dans l’index maître de la première valeur de clé supérieure à k 2.Même recherche qu’en 1. À partir de l’index cylindre 3.Même recherche qu’en 1. À partir de l’index piste (i.e. accès à la piste de la zone primaire contenant l’enregistrement recherché s’il existe) 4.Recherche séquentielle dans la piste de la zone primaire pointée par l’index piste Exemple :Recherche de l’enregistrement de valeur de clé 14 sur l’exemple de la précédente. 1. Index maître : 14 piste 0000 de l’index cylindre 2. Index cylindre : 14 piste 0100 de l’index piste 3. Index piste : 14 piste 0102 de la zone primaire 4. Zone primaire : recherche séquentielle dans cette piste pour accéder au 2e enregistrement logique de valeur de clé 14
66
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Gestion des débordements (en cas d’insertion) : Initialement, les enregistrements sont écrits sur disque dans la zone primaire Lorsqu’il y a débordement, les enregistrements sont répartis dans deux zones de débordement : cylindre et/ou indépendante Zone de débordement cylindre pistes additionnelles sur le même cylindre qui contient la zone primaire Zone de débordement indépendante contenue dans des cylindres autres que celui qui contient la zone primaire Choix du type de zone de débordement (i.e. cylindre, indépendante ou les deux) : par le programmeur à la création du fichier
67
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Gestion des débordements (en cas d’insertion) : Avantages : Zone de débordement cylindre : pas de déplacement de la tête de lecture / écriture du disque Zone de débordement indépendante : meilleure utilisation de l’espace disque À la création du fichier, tous les emplacements de la (ou des) zone(s) de débordement sont vides et réservés à l’expansion du fichier Gestion des débordements : utilisation de la technique du chaînage comme dans la gestion des collisions pour les fichiers d’organisation relative (chap. 5) Lorsque la zone de débordement cylindre est pleine, les enregistrements sont rangés (et chaînés) dans la zone de débordement indépendante (voir figure suivante)
68
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Gestion des débordements (en cas d’insertion) :
69
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Suppression d’enregistrements (Réduction) : Suppression logique et non physique des enregistrements (car sinon risque de destruction du chaînage des enregistrements en zone de débordement) => Gaspillage d’espace ! => Réorganisation périodique du fichier pour la récupération de l’espace perdu par les suppressions logiques Pour accéder à l’enregistrement de valeur de clé 019 : 1. Lire tous les enregistrements Piste 3, Cylindre 1 2. Lire les enregistrements de la zone de débordements du cylindre 1 3. Lire les enregistrements de la zone de débordement indépendante jusqu’à trouver l’enregistrement recherché
70
Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Suppression d’enregistrements (Réduction) :
71
Ali walid A-2002 Merci... Merci pour votre attention
72
Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC321 1990 2 VW Bug Rouge ETK298 2002 3 BMW 322i Noir GHT192 2001 4 Ford Mustang Blanc AZT235 1989 5 Ford Pinto Bleu BHT871 1992 6 VW Rabbit Noir NST231 1997 7 Ford Pinto Blanc BLK283 1998 8 VW Rabbit Bleu BNB932 1997 9 BMW 320 Rouge RGE656 1987 10 Ford Mustang Bleu BAB938 1999 11 Audi 5000 Blanc BLC501 2002 12 VW Jetta Noir NOR132 2000 13 VW Bug Vert VRT394 2001 14 Ford Mustang Rouge RGE184 2002 15 Honda Civic Vert Ver151 1998 16 BMW 320 Blanc BLA320 1999 17 BMW 322i Bleu BLE322 1998 18 Ford Tempo Noir TPO182 1997 19 Ford Pinto Rouge PIN193 1996 20 Ford Mustang Vert MTG202 1995
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.