Zeitadaptives Komprimierungstool

Zeitadaptives Komprimierungstool

Ich frage nach einem Szenario zum Kopieren einer großen Datei auf einen Remote-Server.

Der einfachste Fall ist:

tar c myfile | ssh myserver tar x

Wenn die Netzwerkverbindung schnell ist, ist alles in Ordnung.

In einem langsameren Netzwerk

tar c myfile | bzip2 -1 | ssh myserver tar xj

-- beschleunigt meine Übertragung auf Kosten der CPU-Zeit.

Natürlich kann ich mit der Komprimierungsrate experimentieren und normalerweise versuchen, die richtige zu erraten, damit meine CPU nicht zu sehr ausgelastet ist und das Netzwerk überlastet wird.

Gibt es ein Komprimierungsprogramm oder ein Komprimierungsflag, das bzip2/ xz/... anweist, so viel wie möglich zu komprimieren, während der Ausgabepuffer belegt ist?

Antwort1

zstd --adapt

DerzstdKomprimierungsprogrammhat eine Option, die adaptive Komprimierung einschaltet (die Option wurde in zstdv1.3.6 hinzugefügt). Dadurch wird die Komprimierung an „die aktuell wahrgenommenen E/A-Bedingungen“ angepasst.

zstdWeitere Informationen finden Sie im Handbuch.

Eine vollständige Pipeline könnte etwa wie folgt aussehen:

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'

oder

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'

Wenn Sie -vzum ersten zstdin der Pipeline hinzufügen, erhalten Sie eine Fortschrittsanzeige mit einem Text wie

(L7) Buffered :  32 MB - Consumed : 192 MB - Compressed :  72 MB => 37.50%

wobei der (L7)den Komprimierungsgrad angibt. Bei jeder mäßig großen Datenmenge würde man erwarten, dass sie im Laufe der Zeit schwankt, was zeigt, dass zstdsie sich tatsächlich an die E/A-Bedingungen (und vermutlich auch an die Daten selbst) anpasst.

verwandte Informationen