2011-05-10 14:19:13 +0000 2011-05-10 14:19:13 +0000
69
69

Jakich opcji najlepiej używać podczas kompresji plików za pomocą programu 7 Zip?

Często muszę zbierać pliki dziennika i przesyłać je na centralny serwer (należący do innej firmy). Centralny serwer ma limit wielkości pliku, więc staram się stworzyć jak najmniejszy plik, który nadal jest w formacie zip.

Jakich ustawień najlepiej użyć podczas kompresji pliku tekstowego do formatu zip, gdy jedynym wymaganiem jest mały rozmiar pliku?

Zrobiłem to, co oczywiste i wybrałem ultra kompresję, i zauważyłem, że LZMA wykonuje lepszą pracę niż deflate, ale jest o wiele za dużo innych permutacji opcji, abym mógł je wszystkie przetestować.

Odpowiedzi (6)

65
65
65
2014-04-15 15:15:36 +0000

Aby utworzyć najmniejszy standardowy plik ZIP, jaki może utworzyć 7-Zip, spróbuj:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Źródło: Jak osiągnąć najlepszą, standardową kompresję ZIP?

W przeciwnym razie, jeśli nie zależy Ci na standardzie ZIP, użyj następujących ustawień ultra:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Które wynoszą:

-t7z 7z archive

-m0=lzma
       lzma method

-mx=9 level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on
```.
14
14
14
2013-07-15 10:33:24 +0000

Jeśli możesz użyć formatu .7z, a nie tylko .zip, użyłbym po prostu PPMD z następującymi opcjami i pozostawił wszystko inne tak, jak ustawione przez Poziom kompresji:

  • Format archiwum: 7z
  • Metoda kompresji: PPMD
  • Poziom kompresji: Ultra

Regularnie kompresuję logi serwera/tekstu (60MB+) używając tych opcji i zazwyczaj wychodzą one na poziomie 1-2% oryginalnego rozmiaru.

8
8
8
2019-06-17 16:25:32 +0000

Po wielu eksperymentach, przekopywaniu się przez szczegółową dokumentację 7zip i czytaniu niektórych kodów źródłowych 7z dotyczących zaawansowanych parametrów LZMA2, poniżej znajduje się lepsza metoda. Zmniejszyła ona kilka plików testowych o rozmiarze 1GB ponad 2 do 4 razy lepiej niż poprzednio przyjęte rozwiązania opublikowane tutaj lub nawet na stronie manpage 7z.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

Zakłada się tutaj kompresję LZMA2, ale możesz być w stanie uzyskać jeszcze lepszą wydajność w 7zip z przekazaniem zaawansowanych opcji LZMA2, takich jak -m0=LZMA2:27, lub -m0=LZMA2:d25, lub tablicy parametrów, takich jak

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Takie parametry nie były respektowane przez wersje 7z, które testowałem, ale możesz chcieć zbadać to dalej lub poprawić kod 7z, aby poprawnie je przetwarzał. A może to powinno działać i jest po prostu zepsute w testowanych buildach.

7
7
7
2016-08-15 13:27:49 +0000

Porównuję dla db.fdb 1,2 GB (1236598784 B) w Ubuntu server 14.04.03 z p7zip [64] 9.20 na VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

i mam takie wyniki:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

Myślę, że druga metoda działa dobrze = (prawie) najlepsza kompresja z najlepszym czasem. Ale dla najlepszego “widoku” i łatwego do zapamiętania jest pierwsza metoda - z małymi plikami i bez punktu maksymalnej kompresji. Pomiędzy 2 i 3 metodą nie dostaniemy dodatkowo mniejszego 7z, ale zapłacimy prawie dwa razy więcej czasu za kompresję. Każdy decyduje według własnego uznania.

3
3
3
2019-12-05 09:37:09 +0000

Postanowiłem zrobić kilka eksperymentów w celu empirycznego znalezienia optymalnych parametrów kompresji.

Narzędzie, którego użyłem wa 7-ZIP finetuner . To narzędzie poluje na optymalne parametry po prostu powtarzając kompresję ze zmieniającymi się parametrami szukając optymalnej kombinacji. Uruchomienie dla jednego pliku może czasami zająć więcej niż godzinę, nawet na szybkim komputerze.

Parametry, które próbuje to:

LC : number of Literal Context bits
LP : number of Literal Pos bits
PB : number of Pos Bits
YX : level of file analysis
FB : number of Fast Bytes

Pozostawiłem domyślne parametry wielkości słownika jako 512 MB i solid block size On. Narzędzie używa metody LZMA.

Najlepsze kombinacje parametrów na kilku typach plików były następujące:

Zwracam uwagę, że najlepsze wartości nie były stałe nawet dla plików tego samego typu.

Wnioski: Nie ma najlepszych opcji , ponieważ każdy plik może mieć swoją własną, unikalną, najlepszą kombinację. Można podkręcić wszystkie parametry do granic możliwości, ale poprawa nie jest wcale gwarantowana.

Najczęstszą kombinacją wydaje się być:

LC : 8
LP : 0
PB : 1
YX : 5
FB : 273

Niektóre referencje 7-Zip:

0
0
0
2011-05-10 14:37:36 +0000

Ustaw pole “Podziel na objętość, bajty” na maksymalny dozwolony rozmiar pliku serwera (w bajtach, jak sądzę, choć wygląda na to, że akceptuje wspólne skróty, takie jak “KB” i “MB”). Jeśli plik zip przekroczy ten rozmiar, 7-zip automatycznie podzieli go na wiele plików, takich jak integrationserviceLog.zip.001, _integrationserviceLog.zip.002_ itd. (Dawno temu PK Zip używał tego do rozdzielania plików zip na wiele dyskietek). Będziesz potrzebował wszystkich plików, aby je rozpakować. Użyj tego zamiast martwić się o absolutnie najlepsze ustawienia kompresji do użycia dla konkretnego zestawu plików, ponieważ to, co jest najlepsze dla jednego pliku, może być inne dla innego pliku, a nie chcesz przechodzić przez to za każdym razem, gdy musisz skopiować dzienniki.