1 / 19

Gestion de Fichiers

Gestion de Fichiers. GF-15: Addressage Disperse (Hashcoding) (Base sur le Chapitre 11 de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented Approach with C++; ). Motivation.

bayard
Download Presentation

Gestion de Fichiers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gestion de Fichiers GF-15: Addressage Disperse (Hashcoding) (Base sur le Chapitre 11 de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented Approach with C++;)

  2. Motivation • La recherche sequentielle peut etre faite en temps d’acces d’ordre O(N), ce qui veut dire que le nombre de “seeks” augmente au meme taux que la taille du fichier. • Les arbres B diminuent ce taux puisqu’ils permettent un temps d’acces d’ordre O(LogkN) ou k est une mesure de la taille d’une feuille (c’e.a.d., le nombre d’enregistrements qui peuvent etre sauvegarder dans une feuille). • Ce que l’on voudrait, cependant, est un temps d’acces d’ordre O(1) ce qui veut dire que quelque soit la taille du fichier le temps d’acces a un enregistrement est toujours un petit nombre de “seeks”. • Hashcoding Statique: Ces techniques peuvent atteindre une telle performance si la taille du fichier n’augmente pas.

  3. Qu’Est-ce que le Hashcoding? • Une fonction Hash est une fonction h(K) qui peut transformer une cle K en une addresse. • Hashcoding est relie a la construction d’indexes qui correspond a associer une cle a une addresse relative d’enregistrement. • Hashcoding, cependant, est different de la construction d’indexes en deux respects: • Avec le hashcoding, il n’y a pas de connection evidente entre la cle et l’addresse. • Avec le hashcoding, deux cles differentes peuvent etre etre transformees en la meme addresse.

  4. Collisions • Lorsque deux cles differentes produisent la meme addresse, il y a une collision. Les cles impliquees dans cette collision s’appellent des synonymes. • Neanmoins, il est tres difficile de trouver une fonction hash qui evite les collisions. Il est plus simple de trouver des moyens de resoudre ces collisions. • Solutions Possible: • Espacer les enregistrements • Utilisation de memoire supplementaire • Placement de plus d’un enregistrement a une addresse.

  5. Un Algorithme de Hashcoding Simple • Etape 1: Representer la cle en forme numerique. • Etape 2: Plier et Ajouter (Fold and Add) • Etape 3: Division par un nombre premier et utilisation du reste comme d’une addresse.

  6. Fonctions Hashcoding et Distribution d’Enregistrements • Les enregistrements peuvent etre distribues sur toutes les addresses de manieres differentes: Il peut y avoir (a) aucun synonymes (distribution uniforme); (b) que des synonymes (pire cas); (c) quelques synonymes (cela arrive avec des distributions au hasard). • Les distributions uniformes pures sont difficiles a obtenir et ne valent pas la peine d’etre cherchees. • Les distributions au hasard peut etre facilement derivees mais elles ne sont pas parfaites car elles peuvent generer un nombre important de synonymes. • On veut des methodes de hashcoding meilleures que cela.

  7. D’autres Methodes de Hashcoding • Bien qu’il n’existe pas de fonction hashcoding qui garantisse des distributions meileures que les distributions au hasard dans tous les cas, si on considere le cles qui vont etre “hachees”, certaines ameliorations sont possibles. • Voici quelques methodes qui sont potentiellement meilleures que les methodes au hasard: • Examiner les cles pour trouver un patron • “Plier” certaines parties de la cle • Diviser la cle par un nombre • Elever la cle au carre et prendre le milieu • Faire une transformation radix.

  8. Prediction de la Distribution des Enregistrements • Lorsque l’on utilise une distribution au hasard, on peut utiliser certains outils mathematiques pour obtenir des estimation conservatives de la facon dont notre fonction hash peut se comporter: • En utilisant la Fonction Poissonp(x)=(r/N)xe–(r/N)/x! applique au hashcoding, on peut conclure que: • En general, s’il y a N addresses, le nombre attendu d’addresses a x enregistrements affectes est de Np(x) .

  9. Prediction de Collisions pour un Fichier Plein • Veuillez supposer que vous avez une fonction hash qui, theoretiquement, distribue les enregistrements au hasard, et que vous voulez mettre en storage 10,000 enregistrements dans 10,000 addresses. • Combien d’addresses ne devraient pas avoir d’enregistrements qui y soient affectes? • Combien d’addresses devraient avoir un, deux et trois enregistrements qui y soient affectes, respectivement? • Comment peut-on reduire le nombre d’enregistrements qui debordent?

  10. Augmentation d’Espace Memoire I • Une reduction de collisions peut etre atteinte en choisissant utilisant une bonne fonction hash ou en utilisant de la memoire additionelle. • La question posee est la suivante: Quel montant de memoire additionnelle doit on utiliser pour obtenir un taux de reduction de collision donnee? • Definition: la Densite d’Implantation (Packing Density) correspond a la proportion de nombre d’enregistrements a sauvegarder (r) par rapport au nombre d’espaces disponibles (N). • La densite d’implentation nous donne une mesure du montant d’espace de fichier vraiement utilise.

  11. Augmentation d’Espace Memoire II • La distribution Poisson nous permet de predire le nombre de collisions qui peuvent se produire etant donne une certaine densite d’implantation. On utilise la distribution Poisson pour repondre aux questions suivantes: • Combien d’addresses ne devraient avoir aucun enregistrements qui y soient affectes? • Combien d’addresses ne devraient avoir qu’un enregistrement qui y soit affecte (pas de synonymes)? • Combien d’addresses devraient avoir un enregistrement plus un ou plusieurs synonymes? • Si on suppose qu’un seul enregistrement peut etre affecte a chaque addresses, a combien d’enregistrements debordants peut-on s’attendre? • Quel pourcentage d’enregistrements sera un enregistrement debordant?

  12. Resolution de Collision par Debordement Progressifs • Que faire lorsque l’on a des enregistrements qui n’ont pas de place a leur addresse? Une approche simple est la suivante: Debordement Progressif (ou Sondage Lineaire). • Si une cle k1 est hachee a la meme addresse a1 qu’une autre cle k2, alors on cherche la premiere addresse disponible a2, suivant a1; et on place k1 en a2. Si on atteint la fin de l’espace addresse avant de trouver une addresse disponible alors on retourne au debut de cet espace et on continue la recherche. • Lorsque l’on cherche une cle qui n’est pas dans l’espace, si l’espace d’addresse n’est pas plein, alors une addresse vide sera atteinte tot ou tard; Sinon, la recherche retournera a son point de depart.

  13. Longueur d’un Recherche lorsque le Debordement Progressif est Utilise • Le debordement progressif cause des recherches additionelles et, donc, des acces au disque additionels. • S’il y a beaucoup de collisions, alors beaucoup d’enregistrements seront loin de leur “addresse reelle”. • Definition: la Longueur de recherche correspond au nombre d’acces requis pour recuperer un enregistrement de memoire secondaire. La longueur de recherche moyenne est le montant de temps moyen auquel on peut s’attendre pour recuperer un enregistrement du disque. • longueur de recherche moyenne = (longueur de recherche totale)/(nombre total d’enregistrements)

  14. Storage de Plus d’un Enregistrements par Addresse: Bucket • Definition: Un bucket decrit un bloc d’enregistrements partageant la meme addresse et etant recuperes dans un meme acces au disque. • Lorsqu’un enregistrement va etre mis en storage ou recupere de storage, son addresse de bucket est determinee par la fonction hash. Lorsqu’un bucket est remplit, on doit toujours resoudre le probleme de debordement d’enregistrements, mais ce probleme apparait beaucoup moins souvent que lorsque chaque addresse ne peut contenir qu’un seul enregistrement.

  15. Effet des Buckets sur la Performance • Afin de calculer la densite d’implantation d’un fichier, on doit considerer: 1) Le nombre, N, d’addresses (buckets) disponibles et 2) le nombre, b, d’enregistrements que l’on peut mettre a chaque addresse (la taille des buckets) et 3) le nombre, r, d’enregistrements dans le fichier. Alors, densite d’implantation = r/bN. • Bien que la densite d’implantation ne change pas lorsque l’on reduit de moitie le nombre d’addresses et que l’on double la taille des buckets, le nombre de debordements attendu diminue dramatiquement.

  16. Effacer des Enregistrements • L’effacement d’un enregistrement d’un fichier hache est plus complique que l’addition d’enregistrements pour deux raisons: • L’espace dans lequel l’effacement s’est fait ne doit pas deranger les recherches futures. • Il devrait etre possible de re-utiliser les espaces liberes dans des additions futures. • Afin de traiter les effacements, on utilise des pierres tombales, c’e.a.d., un signal indiquant qu’un enregistrement etait la auparavant mais n’y est plus. Les pierres tombales resolvent les deux problemes causes par l’effacement, simultanement. • L’insertion d’enregistrements est un petit peu differente lorsque l’on utilise des pierres tombales.

  17. Effets des Effacements et des Additions sur la Performance • Une fois qu’un large nombre d’effacements et d’additions ont pris place, il y aura beaucoup de pierres tombales occuppant des emplacements qui pourraient etre occuppes par des enregistrements dont l’addresse precede ces pierres tombales, mais qui sont mises en storages plus loin. • Ceci deteriore la longueur de recherche moyenne. • Il y a trois type de solutions qui permettent de resoudre ce probleme: a) reorganisation locale pendant les effacements; b) reorganisation globale lorsque la longueur de recherche moyenne est trop grande; c) l’utilisation d’un algorithme de resolution de collision different.

  18. Autres Techniques de Resolution de Collision Il y a quelques variations sur le hashing au hasard qui peut ameliorer la performance: • Double Hashing: lorsqu’un debordement se produit, utiliser une seconde fonction hash pour trouver la location de debordement de cet enregistrement. • Debordement progressif chaine: Comme le debordement Progressif mis a part le fait que les synonymes sont lies l’un a l’autre avec des pointeurs. • Enchainement avec une aire de debordement separee: Comme le debordement progressif chaine mis a part le fait que les addresses de debordement n’occuppe pas les addresses normales (de non-debordement) • Scatter Tables: Le fichier hash ne contient pas d’enregistrements, mais seulement des pointeurs a ces enregistrements. I.e., c’est un index.

  19. Patron d’Acces aux Enregistrements • Si on a des informations sur les enregistrements qui sont accedes le plus souvent, on peut optimiser leur location de facon a ce que ces enregistrements aient des longueurs de recherche courtes. • En faisant cela, on essaie de diminuer la longueur effective moyenne de recherche meme si la longueur nominale moyenne de recherche reste la meme. • Ce principe est relie a celui utilise dans l’encodage Huffman.

More Related