Gestion de Fichiers Tri Interne Efficace et Tri

  • Slides: 14
Download presentation
Gestion de Fichiers Tri Interne Efficace et Tri Externe

Gestion de Fichiers Tri Interne Efficace et Tri Externe

Plan du cours d’aujourd’hui n n n Vue générale Tri interne efficace: heapsort Tri

Plan du cours d’aujourd’hui n n n Vue générale Tri interne efficace: heapsort Tri de grands fichiers n mergesort n Temp d’exécution de mergesort n Le cout associé à l’allongement des fichiers n Amélioration de la performance de mergesort n Ajout de hardware n Améliorations algorithmiques n Chevauchement des opérations d’entrée/sortie 2

Vue générale n n n Ce cours s’intéresse à la question du tri efficace

Vue générale n n n Ce cours s’intéresse à la question du tri efficace dans le traitement des fichiers. En particulier, il s’intéresse au tri efficace dans deux cas: n Le cas où le fichier peut tenir en mémoire n Le cas où le fichier est trop grand pour tenir en mémoire => Tri externe Les techniques de fusion discutées précédemment (i. e. traitement coséquentiel) sont très utiles pour le tri de grands fichiers. 3

Une approche efficace pour le triage en mémoire interne n n n Nous n’avons

Une approche efficace pour le triage en mémoire interne n n n Nous n’avons considéré jusqu’à maintenant que le triage de fichiers assez petits pour tenir en mémoire: n On peut lire le fichier du disque en mémoire n On peut le trier en utilisant une procédure habituelle. n On peut écrire le fichier trié sur le disque Si le fichier est lu et écrit de facon aussi efficace que possible et si le meilleur algorithme de triage est utilisé, il semblerait que l’on ne peut pas améliorer cette procédure. Néanmoins, une amélioration est possible par un traitement en parallèle: on peut, en effet, lire et écrire en même temps que l’on fait le triage. 4

Chevauchement du traitement et de l’entrée/sortie: heapsort n heapsort peut être combinée avec la

Chevauchement du traitement et de l’entrée/sortie: heapsort n heapsort peut être combinée avec la lecture du disque et l’écriture sur le disque, de la manière suivante: n Le heap peut être construit pendant que le fichier non trié est lu du disque. n Le tri peut être fait pendant que la partie triée du fichier est écrite sur le disque. 5

Construction du heap pendant la lecture du fichier n n Au lieu de faire

Construction du heap pendant la lecture du fichier n n Au lieu de faire un seek à chaque fois que l’on veut un nouvel enregistrement, on peut lire des blocs d’enregistrements en une seule fois dans une mémoire tampon et opérer sur ce bloc avant de se tourner vers un autre bloc. La mémoire tampon d’entrée pour chaque nouveau bloc devient une partie de la mémoire reservée pour le heap. A chaque fois que l’on lit un nouveau bloc, on l’attache à la fin du heap courant. Le premier nouvel enregistrement à ajouter est à la fin du tableau contenant le heap comme requis par la fonction d’insertion dans le heap. Une fois qu’un enregistrement est inserré, le nouvel enregistrement suivant est a la fin du tableau contenant le heap, de nouveau, prêt à être inserré. 6

Construction du heap pendant la lecture du fichier (suite) n n Afin de construire

Construction du heap pendant la lecture du fichier (suite) n n Afin de construire le heap en même temps, on a besoin de mémoires tampon multiples: tout en traitant les enreg. s d’un bloc, on peut simultanément lire un autre bloc qui sera traité plus tard. Question: Combien de mémoires tampon doivent être utilisées et où doit-on les mettre? Réponse: Le nombre de mémoires tampon correspond au nombre de blocs dans le fichier et elles doivent être localisées en séquence dans le tableau. Puisque la construction du heap est plus rapide que la lecture de blocs, il peut y avoir certains delais. 7

Faire le heapsort tout en écrivant le fichier trié sur le disque (Fig. 8.

Faire le heapsort tout en écrivant le fichier trié sur le disque (Fig. 8. 19) n n Le plus petit enregistrement du heap est connu dès la première étape du heapsort. Donc, il peut être mis dans une mémoire tampon de sortie jusqu’à ce qu’un bloc entier trié soit determiné. Pendant que ce bloc est écrit sur le disque, un nouveau bloc trié peut être préparé, etc… Puisqu’a chaque fois qu’un nouveau bloc est écrit sur le disque, la taille du heap diminue par un facteur de un bloc, ce bloc peut être utilisé comme mémoire tampon. Ainsi on a autant de mémoire tampon de sortie qu’il y a de bloc dans le fichier. Puisque tout le I/O est séquentiel, cet algorithme marche aussi bien avec des disques que avec des bandes magnétiques. De même, três peu de seeking est nécessaire et la procédure est donc efficace. 8

Une technique efficace pour trier de large fichiers sur disques: mergesort n n Une

Une technique efficace pour trier de large fichiers sur disques: mergesort n n Une solution pour le problème des fichiers qui ne tiennent pas en mémoire a déjà été présentée sous la forme de l’algorithme pour triage de clés. Cependant, cet algorithmes a deux insuffisances: Une fois que les clés étaient triées, il était couteux de cher (seek) chaque enregistrement en ordre et de les écrire dans le nouveau fichier trié. Si le fichier contient de nombreux enregistrements, l’indexe lui-même ne tiendra pas en mémoire. Solution: (1) diviser le fichier en plusieurs sous-fichiers triés (“runs”) en utilisant une méthode de tri interne; et (2) fusionner tous les runs avec mergesort (Fig. 8. 21). 9

Avantages du mergesort n n n Il peut être appliqué à des fichiers de

Avantages du mergesort n n n Il peut être appliqué à des fichiers de toutes tailles. La lecture de fichier d’entrée pendant l’étape de création des runs est séquentielle Peu de seeking. La lecture de chaque run pendant la fusion est aussi séquentielle. Le seul seeking necessaire est pour aller d’un run à l’autre. Si heapsort est utilisé pour l’étape de tri des runs en mémoire, son opération peut être chevauchée avec celle du I/O. Puisque le I/O est surtout séquentiel, des bandes magnétiques peuvent être utilisées. 10

Temps est nécessaire pour un mergesort Supposition de simplification: n Seulement un seek est

Temps est nécessaire pour un mergesort Supposition de simplification: n Seulement un seek est requis pour chaque accès séquentiel. n Seulement un délai de rotation est nécessaire par accès. Etapes couteuses (incluant du I/O) de mergesort: n Pendant la phase de Tri: n Lecture de tous les enregistrements dans la mémoire pour le tri et la formation des runs. n Ecriture des runs triées sur le disque. n Pendant la phase de Fusion: n Lecture des runs triées dans la mémoire pour la fusion n Ecriture du fichier trié sur le disque. 11

Type de I/O prenant place lors des phases de tri et de fusion n

Type de I/O prenant place lors des phases de tri et de fusion n Puisque, pendant la phase de tri, les runs sont crées en utilisant heapsort, I/O est séquentiel. Aucune amélioration de performance n’est possible ici. Pendant l’etape de lecture de la phase de fusion, il y a beaucoup d’accès au hazard (puisque les runs différents sont amenées en mémoire et effacées de la mémoire de manière imprédictible). Le nombre et la taille de la mémoire tampon contenant les runs détermine le nombre d’accès au hazard. De l’amélioration de performance peut prendre place en cette étape. L’etape d’ecriture de la phase de fusion n’est pas influencée par la facon dont on organize les runs. 12

Cout associé à l’allongement des fichiers n En général, pour une fusion de K

Cout associé à l’allongement des fichiers n En général, pour une fusion de K runs où chaque run est aussi large que l’espace libre en mémoire, la taille de la mémoire tampon pour chacun des runs est de: (1/K)*taille de l’espace mémoire=(1/K)*taille de chaque run. n n Donc K seeks sont requis afin de lire tous les enregistrements dans chacun des runs individuels et puisqu’il y a k runs en tout, l’opération de fusion requiert K 2 seeks. Puisque K est directement proportionnel à N, le nombre d’enregistrements, mergesort est une opération d’ordre O(N 2) comptée en nombre de seeks. 13

Que faire pour améliorer la performance de mergesort? n n n La performance de

Que faire pour améliorer la performance de mergesort? n n n La performance de mergesort peut être ameliorée de plusieurs façons: On peut allouer plus de hardware tel que des unités de disque, de la mémoire ou des chaines I/O. On peut performer la fusion en plus d’une étape, en réduisant l’ordre de chaque fusion et augmentant la taille de la mémoire tampon pour chaque run. On peut augmenter la longueur des runs triés initial, algorithmiquement. On peut trouver des façons de chevaucher les opérations I/O. 14