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.

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MLH (Multidimensional linear hashing)
Advertisements

Module Systèmes d’exploitation
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : B arbres
Tris.
Chap. 4 Recherche en Table
GEF 435 Principes des systèmes d’exploitation
Les Algorithmes de tri.
Chap. 1 Structures séquentielles : listes linéaires
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Methode de Tri efficace
II. Chaînage, SDD séquentielles
Publispostage Menu Outils / Lettres et publipostage
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Bases de données lexicales
Gestion de Fichiers Arbres B.
Indexation 1. Concepts de base 2. Arbre B 3. Indexes secondaires.
Sections sélectionnées du Chapitre 11
FICHIERS : Définition : Algorithme général:
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
LES ARBRES IUP 2 Génie Informatique
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Gestion de Fichiers Indexes basés sur les structures d’arbres binaires et indexes à niveaux multiples.
Indexes à Arbres et Indexes à Hachage
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Gestion de Fichiers Hachage Extensible.
Indexes à Arbres et Indexes à Hachage
Gestion de Fichiers Hachage (suite). 2 Plan du cours daujourdhui Prédiction de la distribution des enregistrements Réduction des collisions en augmentant.
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
Développement dapplication avec base de données Semaine 10 : WCF avec Entité Framework Automne 2013.
Index multi-niveaux dynamiques (les B-arbres et les B-arbres+)
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Initiation aux bases de données
Programmation linéaire en nombres entiers
Gestion de Fichiers GF-8: Organisation des Fichiers pour l’Amelioration de la Performance (Base sur la section de Folk, Zoellick & Riccardi, File.
II. Chaînage, SDD séquentielles
Structures de données avancées : Fichiers uni-dimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Gestion de Fichiers Hachage (suite et fin). 2 Plan du cours d’aujourd’hui Utilisation des “buckets” Effacements dans des fichiers hachés Autres méthodes.
GF-11: Tri Interne Efficace et Tri Externe
Structures de données avancées : MBT ( Multidimensional B-trees )
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
La Gestion des fichiers
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
Les fichiers 1ère partie
Structures de données avancées : B arbres
Structures de données avancées : Variantes des B arbres
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Système de gestion fichiers
Structures de données avancées : Principales structures de fichiers
06/04/06 LES BASES DE DONNEES INTRODUCTION CogniTIC – Bruxelles Formation - Cepegra.
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : MLH (Multidimensional linear hashing) D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : Principales structures de données
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Matière Sélectionnée: Triage Externe, Join à Hachage, … Chapitres 13—15: 13.1—13.5, 14.4,
Structures de données avancées : Hachage dynamique
Structures de données avancées : MTH ( Multidimensional trie hashing ) D. E ZEGOUR Institut National d ’Informatique.
Architecture et technologie des ordinateurs II
Chapitre 4 La représentation des nombres.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Raison d'être de la structure de fichiers : Les premiers travaux : Début des années 1960 : En 1963 : Près de 10 ans plus tard... (à peu près 1973) : Durant.
Plan... Fichiers à enregistrements chaînés ( threaded files) Principe Structure d’un fichier à enregistrements chaînés Exemple Organisation « multi-listes.
Plan… -Introduction et motivations : -Qu'est-ce que le traitement de fichiers ? -Terminologie et définitions fondamentales des structures de fichiers :
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Transcription de la présentation:

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

Plan: Fichier d’organisation séquentielle indexée (index statique) 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

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

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

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

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

Critères de classification des techniques d’indexation.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordon­nées (valeurs dou­bles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire Ali walid A-2002

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

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 enregistre­ments (système VSAM d’IBM) Ali walid A-2002

Les index primaires.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordon­nées (valeurs dou­bles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire Ali walid A-2002

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

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

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

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é.

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: 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.

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

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

Ali walid A-2002 Exmeple: Nombre d’accès à un bloc sans index... Soit un fichier de données ordonné : - De r = enregistrements de longueur fixe r = 100 octets - Stockés sur des blocs de 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 = / 10 = blocs Une recherche dichotomique sur le fichier nécessitant environ : Log 2 (b) = Log 2 (30 000) = 12 accès bloc

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

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

Ali walid A-2002 Exmeple: Nombre d’accès à un bloc avec index... Soit un fichier de données ordonné :  De r = enregistrements de longueur fixe r = 100 octets -Stockés sur des blocs de 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 = / 10 = 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 = = 15 octets

Ali walid A-2002 Exmeple: Nombre d’accès à un bloc avec index... Le facteur de blocage pour l’index : fb i = / Ri = / 15 = 68 entrées par bloc Le nombre total d’entrées de l’index : r i = (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 = / 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.

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.

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.

Ali walid A-2002 Insertion...solution efficaces 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.

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.

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG

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 ordon­nées (valeurs dou­bles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire

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

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)

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).

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG

Ali walid A-2002 Les index secondaires.... Exclusif Champ d’indexation Index primaire Champs de valeurs ordonnées Champs (non clé) de valeurs ordon­nées (valeurs dou­bles possibles) Champ quelconque de valeurs non ordonnée Index de groupement (clustering) Index secondaire

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.

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).

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é).

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)

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 = enregistrements de longueur fixe R = 100 octets Stockés sur des blocs de octets Nombre de blocs b = (calcul dans l’exemple 1) 1) Une recherche linéaire (i.e. sans index secondaire) nécessiterait en moyenne : b / = / 2 = 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 = = 15 octets Facteur de blocage fbi pour l’index fbi = / ri = / 15 = 68 entrées par blocs

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG

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 Nombre de blocs nécessaires pour le stockage de l’index : bi = / fbi = / 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 : = 10 accès bloc au lieu de ! accès au bloc contenant l’enregistrement recherché dans le fichier de données accès successifs aux blocs de l’index

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.

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

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

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG

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é)

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

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

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

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

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)

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

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.

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

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

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

Ali walid A-2002 Index multi-niveaux: Exemple... Nombre d’accès bloc pour la recherche d’un enregistrement : t + 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)

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

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

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG

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+

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).

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

Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)....

Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Lien entre les 3 niveaux d’index

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

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

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)

Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Gestion des débordements (en cas d’insertion) :

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é

Ali walid A-2002 Un exemple : les fichier ISAM d’IBM (Indexed-sequential Access Method)... Suppression d’enregistrements (Réduction) :

Ali walid A-2002 Merci... Merci pour votre attention

Ali walid A-2002 Exemple... 1 Ford Pinto Blanc NBC VW Bug Rouge ETK BMW 322i Noir GHT Ford Mustang Blanc AZT Ford Pinto Bleu BHT VW Rabbit Noir NST Ford Pinto Blanc BLK VW Rabbit Bleu BNB BMW 320 Rouge RGE Ford Mustang Bleu BAB Audi 5000 Blanc BLC VW Jetta Noir NOR VW Bug Vert VRT Ford Mustang Rouge RGE Honda Civic Vert Ver BMW 320 Blanc BLA BMW 322i Bleu BLE Ford Tempo Noir TPO Ford Pinto Rouge PIN Ford Mustang Vert MTG