11 points par xguru 2021-03-16 | 4 commentaires | Partager sur WhatsApp
  • Un fichier créé avec le module tarfile de Python peut être 15 fois plus petit que celui créé avec tar sur macOS

  • Cause : tar BSD/GNU ajoute les fichiers dans l’archive sans ordre particulier, ce qui peut dégrader le taux de compression selon le type de fichiers

→ le module tarfile de Python trie par défaut

  • Avec GNU tar, il est possible d’utiliser l’option --sort pour trier par nom/inode avant l’ajout → avec le tri, on obtient le même taux de compression

4 commentaires

 
deadcat 2021-03-16

Je ne comprends pas bien : pourquoi le taux de compression change-t-il lorsqu’on applique un tri ? Le taux de compression de chaque fichier pris individuellement devrait pourtant être le même.

 
dalinaum 2021-03-22

L’algorithme utilisé est Deflate. Il stocke dans une fenêtre glissante ce qui a déjà été utilisé pour la compression. Si, cette fois, 10 octets ont été traités, ces 10 octets sont ajoutés à la fin de la fenêtre glissante, et la taille de cette fenêtre reste fixe.

Lorsqu’un contenu identique à ce qui se trouve dans la fenêtre glissante est détecté, la compression se fait en écrivant à la place un triplet LLD (Literal, Length, Distance). Distance indique à partir de quel endroit de la fenêtre glissante se trouve le même contenu, Length la longueur de cette séquence identique dans la fenêtre glissante, et Literal le premier caractère qui ne correspond pas.

Comme, pour Deflate, il est important de savoir ce que contient la fenêtre glissante, le fait d’avoir vu un contenu similaire juste avant compte beaucoup, et si des fichiers semblables ont été vus, il est possible que la compression soit meilleure.

 
dalinaum 2021-03-22

La méthode de compression est expliquée dans les slides ci-dessous. (gzip est lui aussi basé sur Deflate.)

https://speakerdeck.com/dalinaum/…

 
xguru 2021-03-16

Le contenu de fichiers portant le même nom ou un nom similaire dans un même dossier sera probablement similaire, donc le taux de compression sera élevé,

et l’idée semble être qu’au moment de la compression, la portée de recherche pour trouver ces similarités n’est pas très large ; ainsi, si l’on trie les fichiers, il est plus probable que ces éléments similaires soient regroupés et donc mieux compressés.