Gestion de Fichiers GF-8: Organisation des Fichiers pour l’Amelioration de la Performance (Base sur la section de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented Approach with C++;)
2 Resume du Cours d’aujourd’hui Etudions, maintenant, les manieres d’organiser ou de re-organiser les fichiers de maniere a ameliorer la performance: On a deja parle des techniques de compression des fichiers. Parlons maintenant de: Le triage des fichiers de facon a pouvoir appliquer la recherche binaire tri interne Un tri plus sophistique: Tri par cle. La recuperation d’espace dans les fichiers qui ont connu des changements (effacements, mises a jour)
3 Recherche Rapide: Vue Generale I Le cout de la recherche physique (seeking) est tres eleve. Ce cout doit etre pris en consideration lorsque l’on determine une strategie pour la recherche directe. La meme question se pose dans le contexte du tri, qui est le plus souvent la premiere etape d’une recherche efficace. Plutot que d’essayer tout simplement de trier puis de chercher, on va essayer de le faire de maniere a minimiser le nombre de seeks.
4 Recherche Rapide: Vue Generale II Jusqu’a maintenant, la seule facon que l’on ait de trouver des enregistrements rapidement est d’utiliser leur Numero d’Enregistrement Relatif (NER). Ceci ne peut marcher que dans le cas d’enregistrement a taille fixe. Sans le NER ou bien dans le cas d’enregistrements a taille variable, la seule facon de trouver un enregistrement est de faire une recherche sequentielle. Ceci est une methode tres inefficace. On voudrait trouver une facon plus efficace de chercher un enregistrement en utilisant la valeur de leur cle.
5 Recherche Rapide: Recherche Binaire Veuillez supposer que le fichier est trie et que l’on cherche un enregistrement dont la cle est kelly dans un fichier de 1000 enregistrements a taille fixe. 1 2 … : Johnson2: Monroe Comparaison Suivante
6 Recherche Rapide:Recherche Binaire versus Recherche Sequentielle La recherche binaire dans un fichier de n enregistrements prend O(log 2 n) comparaisons. La recherche sequentielle prend O(n) comparaisons. Lorsque la recherche sequentielle est utilisee, doubler le nombre d’enregistrements dans un fichier double le nombre de comparaisons requises pour la recherche. Lorsqu’une recherche binaire est utilisee, doubler le nombre d’enregistrements ajoute une seule comparaison au pire. Afin d’utiliser une recherche binaire, cependant, le fichier doit tout d’abord etre trie. Ceci peut prendre beaucoup de temps.
7 Recherche Rapide: Trier un fichier de disque en Memoire. Si le contenu d’un fichier peut etre sauvegarde entierement en memoire, on peut executer un tri interne. Trier en memoire est tres efficace. Cependant, si le fichier ne tient pas completement en memoire, tous les algorithmes de tri vont necessiter un grand nombre de seeks. Trier serait, dans ce cas, extremement lent. Malheureusement, ceci est souvent le cas et il faut trouver une solution a ce probleme.
8 Recherche Rapide: Les limitations de la recherche binaire et le tri interne La recherche binaire demande plus d’un ou deux acces. Par contre, l’acces aux enregistrements en utilisant un NER peut etre execute en un seul acces Nous voudrions atteindre la preformance d’une recherche par REN tout en conservant l’avantage de l’acces par cle. Conserver un fichier trie est tres cher: en plus de la recherche pour la location precise de l’insertion, une fois cette location trouvee, il faut deplacer les enregistrements afin de degager l’espace pour l’insertion. Le tri interne ne peut marcher que sur des petits fichiers Lorsque l’on a de grands fichiers, on peut utiliser le tri par cle
9 Recherche Rapide: Tri par Cle Vue Generale: Lorsque l’on trie un fichier en memoire, les seules choses qui aient vraiement besoin d’etre triees sont les cles. Les algorithmes de tri par cle marchent comme le tri interne, mais avec deux differences importantes: Plutot que de lire un enregistrement entier dans un tableau en memoire, on lit chaque enregistrement dans une memoire tampon temporaire, on en extrait la cle et on ignore le reste des informations Si on veut ecrire les enregisrements en ordre, il faut les lire une seconde fois.
10 Recherche Rapide: Limitation de la Methode de Tri par Cle L’ecriture d’enregistrements en ordre demande autant de seeks au hasard qu’il y a d’enregistrements. Puisque l’ecriture est parsemee parmi les operations de lectures, l’ecriture demande egalement autant de seeks au hasard qu’il y a d’enregistrements. Solution: Pourquoi re-ecrire le fichier trie par ordre de cle? Il suffit de re-ecrire l’index trie.
11 Recuperation d’Espace dans les Fichiers I: Effacement des enregistrements et compaction du storage. Compaction de Storage: Lorsque beaucoup d’enregistrements ont ete effaces, il est important d’essayer de recuperer l’espace perdu. Ceci peut se faire par compaction. La compaction se fait en cherchant les emplacements du fichier qui n’ont pas de donnees et en recuperant ces espaces. Il est donc important, pour ce faire, d’avoir un moyen pour indiquer les enregistrements effaces. Une fois l’espace perdu detecte, un programme de compaction le comprime.
12 Recuperation d’Espace dans les Fichiers II: Effacement Dynamique des enregistrements a taille fixe Le desavantage de la methode precedente est qu’il y a de l’attente entre l’effacement d’un enregistrement et la compaction. Parfois, cependant, il est necessaire de recuperer l’espace immediatement. Pour ce faire, on peut: Indiquer les enregistrements effaces Trouver l’endroit que les enregistrements effaces ont occuppe afin de le reutiliser lorsque l’on ajoute de nouveaux enregistrements Avoir un moyen de savoir immediatement s’il y a de la place dans le fichier et sauter directements a ces endroits. Solution: Utiliser une liste chainee “libre” sous forme de stack. Les numeros d’enregistrements relatifs (NER) jouent le role de pointeurs.
13 Recuperation d’Espace dans les Fichiers III: Effacement Dynamique des enregistrements a taille variable Meme idee que pour les enregistrements a taille fixe, mais une implementation differente doit etre utilisee. En partiulier, on doit conserver un compte d’octets de chaque enregistrement. De plus, les liens jusqu’au prochain enregistrement sur la liste “libre” ne peuvent pas etre les NERs. De plus, la structure de donnees utilisee pour la liste “libre” ne peut pas etre un stack puisque l’on doit s’assurer que lorsque l’on re- utilise un emplacement, il a la bonne taille.
14 Recuperation d’Espace dans les Fichiers IV: Fragmentation de Storage L’espace perdu a l’interieur d’un enregistrement s’appelle la fragmentation interne. Les enregistrements a taille variable ne souffre pas de fragmentation interne. Par contre, la fragmentation externe ne peut pas etre evitee. Il y a 3 facons de traiter la fragmentation externe: Compaction de Storage Coalescence des trous L’utilisation d’une strategie de placement intelligente
15 Recuperation d’Espace dans les Fichiers V: Strategies de Placement Strategie First Fit: accepter le premier emplacement libre capable d’accomoder le nouvel enregistrement. Strategie Best Fit: choisir le plus petit emplacement de libre qui peut accomoder le nouvel enregistrement. Strategie Worst Fit: choisir le plus grand emplacement de libre.
16 Recuperation d’Espace dans les Fichiers VI: Strategies de Placement II Quelques remarques generales sur les strategies de placement: Les strategies de placement s’appliquent seulement aux enregistrements a taille variable (bien entendu!) Si l’espace est perdu a la fragmentation interne, les meilleurs choix de strategies de placement sont first fit et best fit. Une strategie worst fit aggrave la fragmentation interne. Si, par contre, l’espace est perdu a la fragmentation externe, la strategie worst fit peut etre tres utile.
17 Enregistrements Fixes Tout comme dans le tri rapide, les indexes sont utiles dans le contexte des enregistrements effaces. La liste “libre” indicant la location des enregistrements non-utilises consiste en des enregistrements fixes (pinned records) dans le sens ou ces enregistrements ne peuvent pas etre deplaces car les deplacer creerait des pointeurs pendants (dangling pointers). Les enregistrements fixes, par contre, rendent le tri tres difficile. Une solution consiste a utiliser un index ordonne et a ne pas deplacer les enregistrements.