11 Punkte von xguru 2021-03-16 | 4 Kommentare | Auf WhatsApp teilen
  • Eine mit macOS tar erstellte Datei ist 15-mal größer als eine mit der Python-tarfile-Funktion erstellte Datei

  • Ursache: BSD/GNU tar legt Dateien im Archiv ohne feste Reihenfolge ab, wodurch sich je nach Dateityp die Kompressionsrate verschlechtern kann

→ Die Python-tarfile-Funktion sortiert standardmäßig

  • Bei GNU tar kann man mit der Option --sort nach name/inode sortieren → mit Sortierung dieselbe Kompressionsrate

4 Kommentare

 
deadcat 2021-03-16

Ich verstehe es nicht ganz: Warum ändert sich die Kompressionsrate, wenn man Sortierung anwendet? Die Kompressionsrate pro einzelner Datei wäre doch gleich.

 
dalinaum 2021-03-22

Der verwendete Algorithmus ist Deflate. Dabei werden zuvor zur Komprimierung genutzte Inhalte in einem Sliding Window gespeichert. Wenn diesmal 10 Byte verarbeitet wurden, werden diese 10 Byte am Ende des Sliding Window angehängt; die Größe des Sliding Window ist dabei fest.

Wenn ein Inhalt gefunden wird, der mit einem Inhalt im Sliding Window übereinstimmt, wird zur Komprimierung stattdessen LLD (Literal, Length, Distance) geschrieben. Distance gibt an, ab welcher Stelle im Sliding Window der gleiche Inhalt beginnt, Length die Länge des gleichen Inhalts im Sliding Window, und Literal ist das erste nicht übereinstimmende Zeichen.

Da es bei Deflate wichtig ist, was im Sliding Window enthalten ist, ist entscheidend, ob ein ähnlicher Inhalt unmittelbar zuvor gesehen wurde. Wenn also zuvor eine ähnliche Datei verarbeitet wurde, ist die Wahrscheinlichkeit höher, dass sie besser komprimiert werden kann.

 
dalinaum 2021-03-22

Wie auf diese Weise komprimiert wird, zeigt der folgende Foliensatz. (gzip basiert ebenfalls auf Deflate.)

https://speakerdeck.com/dalinaum/…

 
xguru 2021-03-16

Da Dateien mit demselben oder einem ähnlichen Namen im selben Ordner inhaltlich oft ähnlich sind, ist auch die Kompressionsrate wahrscheinlich höher.

Gemeint ist wohl, dass der Bereich, in dem beim Komprimieren nach solchen Gemeinsamkeiten gesucht wird, nicht unbegrenzt groß ist. Wenn man die Dateien also sortiert, landen ähnliche Dateien näher beieinander, sodass sie mit höherer Wahrscheinlichkeit effizienter komprimiert werden.