Title: Gestion de Fichiers
1Gestion de Fichiers
- GF-9 Construction dIndexes
- (Base sur le Chapitre 7 de Folk, Zoellick
Riccardi, File Structures, An Object-Oriented
Approach with C)
2Resume du Cours de cette semaine
- Vue Generale
- Un indexe pour les fichiers a entrees
sequentielles - Operations de base sur les fichiers indexes a
entrees sequentielles - Indexes trop grands pour tenir en memoire
- Indexer un fichier avec plusieures cles ? Indexes
Secondaires. - Ameliorer la structure des indexes secondaires.
- Indexes Selectifs
- Attachement des indexes aux locations physiques
3Vue Generale
- Un index est une table contenant une liste de
cles associees a un champ de reference pointant
vers lenregistrement dans lequel linformation
referenciee par la cle peut etre trouvee. - Un index vous permet dimposer de lordre dans
votre fichier sans avoir besoin de le
re-arranger. - Un index simple est tout simplement un tableau
dont les elements sont les paires (cle,
reference). - Il est possible davoir plusieurs indexes pour
les memes donnees donnees aux acces multiples. - La construction dindexes nous donne la
possibilite dacceder a des fichiers
denregistrements de longueur variable par cle.
4Un Indexe Simple pour les Fichiers aux
Entrees Sequentielles I
- Nous allons travailler avec une collection
denregistrements de disques (musicaux, cette
fois!) et contenant les informations suivantes - Numero didentification du disque
- Titre
- Compositeur(s)
- Interprete(s)
- Label de la maison dedition
5Un Indexe Simple pour les Fichiers aux
Entrees Sequentielles II
- Nous choisissons dorganiser le fichier en une
serie denregistrements a longueur variable avec
un indicateur de longueur, avant chaque
enregistrement. Les champs de chaque
enregistrement ont aussi des longueurs variables
mais ils sont separes par des delimitateurs. - Nous formons une cle primaire en concatenant le
code de label de la maison dedition avec le
numero didentification du disque. Ceci devrait
former un identificateur unique.
6Un Indexe Simple pour les Fichiers aux
Entrees Sequentielles III
- De facon a obtenir un acces par cle rapide, nous
creons un indexe simple avec un champ cle,
associe a un champ reference, qui indique
laddresse du premier octet de lenregistrement
de donnees correspondant. - Lindexe peut etre trie alors que le fichier na
pas besoin de letre. Cela veut dire que le
fichier de donnees peut avoir des entrees
sequentielles les enregistrements apparaissent
dans lordre dans lequel ils ont ete ajoute au
fichier de donnees.
7Un Indexe Simple pour les Fichiers aux
Entrees Sequentielles IV
- Quelques commentaires sur notre organisation
dindexe - Lindexe est plus facile a utiliser que le
fichier de donnees car 1) il utilise des
enregistrements a taille fixe et 2) il est
surement plus petit que le fichier de donnees. - En forcant le fichier indexe a avoir des
enregistrements a taille fixe, on impose une
limite sur la taille duchamp contenant la cle
primaire. Ceci peut creer des problemes. - Lindexe pourrait contenir plus dinformation que
la cle et la reference. (example on pourrait
egalement retenir la longueur de chaque
enregistrement dans lindexe).
8Operations de Base sur un fichier a entrees
sequentielles
- Supposition Lindex est assez petit pour etre
sauvegarde en memoire. Un peu plus tard, nous
verrons ce qui peut etre fait lorsque cela nest
pas le cas. - Creation des fichiers dindexe et de donnees
- Montage de lindexe en memoire avant son
utilisation. - Re-ecriture du fichier indexe sur disque apres
son utilisation en memoire. - Ajout denregistrements
- Effacement denregistrements
- Mise a jour denregistrements
9Creation, Montage et Re-ecriture
- Lindexe est represente par un tableau
denregistrements. Le montage en memoire peut
donc etre fait sequentiellement en lisant un
large nombre denregistrements dindexe (qui sont
petits) dun seul coup. - Que se passe-t-il lorsque lindexe a ete modifie
en memoire mais sa re-ecriture sur disque na pas
encore ete faite? - On peut utiliser un mecanisme pour indiquer si
lindexe est a jour ou non. - On peut avoir une procedure qui reconstruit
lindexe a partir du fichier de donnees au cas ou
il nest pas a jour.
10Addition dEnregistrements
- Lorsquon ajoute un enregistrement, aussi bien le
fichier de donnees que le fichier contenant
lindexe doivent etre mis a jour. - Dans le fichier de donnees, lenregistrement peut
etre ajoute nimporte ou. Cependant, la position
relative (byte offset) du nouvel enregistrement
dans le fichier doit etre retenue. - Puisque lindexe est trie, la location du nouvel
enregistrement est importante dans lindexe il
faut decaler tous les enregistrements
apparaissant apres celui que lon insere afin de
donner de la place au nouvel enregistrement.
Cependant, cette operation nest pas trop
couteuse puisquelle prend place en memoire.
11Effacement dEnregistrements
- Leffacement denregistrements peut etre fait en
utilisant les techniques discutees dans les notes
gf-8. - De plus, cependant, lenregistrement dindexe
correspondant a lenregistrement de donnees
efface doit aussi etre efface. Encore une fois,
puisque cet effacement prend place en memoire, le
decalage denregistrement nest pas trop couteux.
12Mise a Jour dEnregistrements
- Il y a 2 categories de mises a jour
- La mise a jour change la valeur du champ cle.
- La mise a jour naffecte pas le champ cle.
- Dans le premier cas, aussi bien le fichier
dindexe que le fichier de donnees peut
necessiter le re-tri. Note La mise a jour est
facile a conceptualiser si elle est concue en un
effacement suivi dune insertion (mais
lutilisateur na pas besoin de le savoir). - Dans le second cas, lindexe na pas besoin
detre re-trie, mais le fichier peut en avoir
besoin. Si lenregistrement mis a jour est plus
petit que lenregistrement original, il peut-etre
re-ecrit au meme endroit. Si, par contre, il est
plus grand un nouvel endroit doit etre trouve
(encore une fois, une solution effacement/insertio
n peut etre utilisee.
13Indexes trop grands pour Tenir en Memoire I
- Problemes
- La recherche binaire demande plusieurs seeks
plutot que detre performee a la vitesse de la
memoire. - Le re-arrangement de lindexe demande le
decallage ou le triage de donnees sur lunite de
storage secondaire ? Ceci est tres couteux (vis a
vis du temps requis). - Solutions
- Utilisation dune organisation en Hashcoding
- Utilisation dun indexe organise dans une
structure darbre (example un Arbre-B)
14Indexes trop grands pour Tenir en Memoire II
- Les indexes simples, cependant, ne doivent pas
etre completement abandonnes meme sils sont trop
grand pour tenir en memoire - Ils permettent lacces multiple aux donnees.
15Les Indexes a Cles Multiples
- Les indexes construits precedemment nous
permettent seulement lacces par cle ils nous
permettent de retrouver le disque DG188807, mais
on na pas la possibilite de trouver la 9eme
Symhonie de Beethoven ? Les indexes a cle simple
ne sont pas tres utiles! - Il faudrait avoir dautres cles secondaires
telles que le titre du disque, le composeur,
linterprete. - Bien quil serait possible de lier ces cles
secndaires a une position relative (byte offset)
dans le fichier de donnees, ceci nest
habituellement pas la solution choisie (nous
verrons pourquoi dans un moment). On choisit
plutot de lier la cle secondaire a une cle
primaire qui, elle, pointera directement a la
position relative dans le fichier des donnees.
16Addition sEnregistrement dans un Indexe a cles
multiples
- Lorsquune cle secondaire est utilisee, ajouter
un enregistrement demande la mise a jour du
fichier de donnees, de lindexe primaire et de
lindexe secondaire. La mise a jour de lindexe
secondaire est similaire a celle de lindexe
primaire. - Les cles secondaires sont exprimees en lettres
majuscules. La forme minuscule/majuscule doit
etre obtenue du fichier des donnees. De plus, a
cause de restrictions sur la longueur des cles,
les cles secondaires peuvent parfois etre
tronquees. - Lindexe secondaire peut contenir des
enregistrements dupliques (lindexe primaire ne
le peut pas!
17Effacement dEnregistrements dans un indexe a
cles multiples
- Effacer un enregistrement du fichier de donnees
correspond a effacer sa cle dans lindexe
primaire et peut vouloir dire effacer toutes les
cles pointant a la cle primaire dans les indexes
secondaires. - Cependant, il est aussi possible de ne pas
sinquieter des indexes secondaire ? Cette
solution est moins couteuse car on na pas besoin
de re-arranger les indexes secondaires. - Neanmoins, il y a dautre couts associes a cette
solution.
18Mise a Jour dEnregistrements dans un Indexe a
cles multiples
- Trois situations sont possibles.
- La mise a jour concerne les cles secondaire il
se peut quil fasse re-arranger lindex
secondaire. - La mise a jour concerne les cles primaires des
changements sont requis de lindexe primaire,
mais tres peu de lindexe secondaire. - La mise a jour concerne dautres champs aucun
changement nest requis de lindexe primaire ou
secondaire.
19Recherche en utilisant une combinaison de cles
secondaires
- Avec des cles secondaires, on peut chercher tous
les disques de Beethoven ou tous les disques
intitules Concerto pour Violon. - Encore plus important, on peut utiliser des
combinaisons de cles secondaires (example
cherche tous les disques interpretant la 9eme
Symphonie de Beethoven). - Si nous navions pas de cles secondaires, une
telle requete serait tres couteuse car elle
demanderait une recherche sequentielle de tout le
fichier de donnees. Avec des cles secondaires,
cette requete et facile et rapide a executer.
20Ameliorer la structure de lindexe
secondaire I le Probleme
- Les indexes secondaires amenent deux diffixultes
- Le ficher contenant lindexe doit etre re-arrange
a chaque fois quun nouvel enregistrement est
ajoute au fichier - Sil y a des cles secondaires dupliquees, le
champ de la cle secondaire est repete pour chaque
enregistrement ? De lespace est gaspille.
21Ameliorer la structure de lindexe
secondaire II Solution 1
- Solution 1 On peut changer la structure
secondaire de facon a ce quelle associe un
tableau de references a chaque cle secondaire. - Avantage Ceci permet deviter la necessite de
re-arranger le fichier contennant lindexe trop
souvent. - Desavantages
- Cela peut restreindre le nombre de references
associees a chaque cle secondaire. - Cela peut coser de la fragmentation interne, et
donc, gaspiller de lespace
22Ameliorer la structure de lindexe
secondaire III Solution 2
- Methode Chaque cle secondaire pointe vers une
liste differente de cles primaires. Chacunes de
ces listes peut saggrandir autant que necessaire
et aucun espace nest perdu a la fragmentation
interne. - Avantages
- Lindexe secondaire na besoin detre re-arange
quau moment dune addition denregistrement. - Le re-arrangement est plus rapide.
- Il nest pas tres couteux de sauvegarder lindexe
secondaire sur le disque. - Lindexe primaire na jamais besoin detre trie.
- Lespace dune cle primaire effacee peut etre
facilement re-utilise. - Desavantage
- La localite (dans lindexe secondaire) a ete
perdue ? Il faudra peut-etre faire plus de
seeking.
23Indexes Selectifs
- Lorsque vous utilisez des cles secondaires, vous
pouvez diviser le fichier en plusieures parties
et, ce faisant, fournir des vues selectives des
donnees. - Par example, vous pouvez construire un indexe
selectif qui ne contient que les titres de
disques de musique classique, ou de disques
apparus avant 1970 ou apres 1970. - Une demande possible pourrait ainsi etreDonner
une liste de tous les disques de la 9eme
Symphonie de Beethoven apparus apres 1970.
24Attachement I
- Question A quel moment une cle est-elle attachee
a laddresse physique de lenregistrement duquel
elle correspond? - Reponse jusqua maintenant Lattachement de nos
cles primaires prend place au moment de la
construction. Lattachement de nos cles
secondaires prend place au moment ou elles sont
utilisees. - Avantage de lattachement au moment de la
construction Un acces plus rapide. - Desavantage de lattachement au moment de la
construction la reorganisation du fichier de
donnees doit resulter en une modification de tous
les indexes deja attaches. - Avantages de lattachement au moment de
lutilisation moins risque
25Attachement II
- Choix dans les decisions sur lattachement
- Un attachement rigoureux au moment de la
construction est preferable lorsque - le fichier de donnees est statique ou presque
statique, ne demandant que peu ou pas dajouts
deffacements et de mises a jour. - Une performance rapide pendant la recherche est
une grande priorite. - Retarder lattachement aussi longtemps que
possible est plus simple et moins risque lorsque
le fichier de donnees demande beaucoup dajouts,
deffacements et de mises a jour.