Compression

Le blog de No life contient un billet intéressant la compression et les archives zip. Je ne suis pas un fan des archives zip, mais mes reproches ont plus à voir avec sa structure tête-bête: les données y sont inscrites en partant depuis la fin du fichier. À cause de cela on peut peut donc accoler une archive zip à n’importe quel fichier, par exemple une image au format JPEG, et on obtient un fichier qui est une image fonctionnelle mais aussi une archive cachée. Ce truc peut naturellement être utilisé à mauvais escient.

Si la séparation logique entre archive et fichier compressé est claire en théorie, elle l’est un peu moins en pratique. Même un format d’archive pur peut réduire la taille utilisée par des fichiers en linéarisant les méta-données. Ainsi un répertoire contenant 1000 fichiers de 1 bytes, n’occupera pas 1000 bytes sur le disque. Les fichiers ont typiquement une taille d’allocation minimale, par exemple 4K, donc ce répertoire peut très bien occuper 4 Megabytes. Le simple fait de créer une archive de ce répertoire peut donc déjà réduire la taille, simplement en stockant uniquement ce qui est nécessaire.

Le problème sous-jacent est qu’il n’y a pas de réelle différence entre un stockage efficient et compression sans perte. Il n’existe pas de solution de compression générale, et selon le type de données différent algorithmes de compression spécialisés seront beaucoup plus efficaces que les compressions génériques comme gzip. L’approche qui consiste à séparer la compression du stockage de données de la compression a l’avantage d’être élégante et modulaire, elle n’est malheureusement pas efficace.

One thought on “Compression

  1. Un petit exemple de spécialisation : le format bz2 est destiné à compresser des fichiers de pur texte. Relativement lent, il donne vraiment des résultats déments quand on l’applique par exemple à 400M de fichier de script SQL ou de log ou de xml, etc. Par contre, appliqué à du binaire, exécutable ou image, bz2 est une bille. Toujours aussi lent, il n’apporte par rapport au gzip.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.