Istnieje wiele algorytmów kompresji i bzip2
jest to jeden z tych wolniejszych. Zwykły jest gzip
zwykle znacznie szybszy, przy zwykle niewiele gorszej kompresji. Kiedy prędkość jest najważniejsza, lzop
jest moim ulubionym. Słaba kompresja, ale och, tak szybko.
Postanowiłem się zabawić i porównać kilka algorytmów, w tym ich równoległe implementacje. Plik wejściowy jest wynikiem pg_dumpall
polecenia na mojej stacji roboczej, pliku SQL 1913 MB. Sprzęt to starszy czterordzeniowy i5. Czasy są zegarem ściennym samego kompresji. Równoległe implementacje są ustawione na wykorzystanie wszystkich 4 rdzeni. Tabela posortowana według prędkości kompresji.
Algorithm Compressed size Compression Decompression
lzop 398MB 20.8% 4.2s 455.6MB/s 3.1s 617.3MB/s
lz4 416MB 21.7% 4.5s 424.2MB/s 1.6s 1181.3MB/s
brotli (q0) 307MB 16.1% 7.3s 262.1MB/s 4.9s 390.5MB/s
brotli (q1) 234MB 12.2% 8.7s 220.0MB/s 4.9s 390.5MB/s
zstd 266MB 13.9% 11.9s 161.1MB/s 3.5s 539.5MB/s
pigz (x4) 232MB 12.1% 13.1s 146.1MB/s 4.2s 455.6MB/s
gzip 232MB 12.1% 39.1s 48.9MB/s 9.2s 208.0MB/s
lbzip2 (x4) 188MB 9.9% 42.0s 45.6MB/s 13.2s 144.9MB/s
pbzip2 (x4) 189MB 9.9% 117.5s 16.3MB/s 20.1s 95.2MB/s
bzip2 189MB 9.9% 273.4s 7.0MB/s 42.8s 44.7MB/s
pixz (x4) 132MB 6.9% 456.3s 4.2MB/s 7.9s 242.2MB/s
xz 132MB 6.9% 1027.8s 1.9MB/s 17.3s 110.6MB/s
brotli (q11) 141MB 7.4% 4979.2s 0.4MB/s 3.6s 531.6MB/s
Jeśli 16 rdzeni twojego serwera jest na tyle bezczynnych, że wszystkie mogą być użyte do kompresji, pbzip2
prawdopodobnie zapewnią ci bardzo znaczne przyspieszenie. Ale wciąż potrzebujesz większej prędkości i możesz tolerować ~ 20% większe pliki, gzip
to prawdopodobnie najlepszy wybór.
Aktualizacja: Dodałem brotli
(patrz odpowiedź TOOGAM) wyniki do tabeli. brotli
s ustawienie jakości kompresji ma bardzo duży wpływ na współczynnik kompresji i prędkości, więc dodałam trzy ustawienia ( q0
, q1
, i q11
). Domyślnie jest q11
, ale jest bardzo powolny i wciąż gorzej niż xz
. q1
wygląda jednak bardzo dobrze; taki sam współczynnik kompresji jak gzip
, ale 4-5 razy szybszy!
Aktualizacja: Dodano lbzip2
(patrz komentarz gmathts) i zstd
(komentarz Johnny'ego) do tabeli i posortowano według szybkości kompresji. lbzip2
stawia bzip2
powrót rodziny w prowadzeniu przez kompresję trzy razy tak szybko, jak pbzip2
z wielkim stopniu sprężania! zstd
również wygląda rozsądnie, ale pokonuje go brotli (q1)
zarówno stosunek, jak i prędkość.
Mój oryginalny wniosek, że zwykły gzip
jest najlepszym zakładem, zaczyna wyglądać niemal głupio. Choć dla wszechobecności wciąż nie da się go pokonać;)