Я на роботі провів тести архіваторів на наших реальних даних, для потреб архівування дампу бази даних. Отримав несподівані результати:
Original file size: 64184072 bytes
"lzop -1" 0.12s 15386021
"lzop -2" 0.11s 15340167
"lzop -3" 0.12s 15340167 + when CPU is more important, 3x larger than "xz -6"
"lzop -4" 0.11s 15340167
"lzop -5" 0.11s 15340167
"lzop -6" 0.10s 15340167
"lzop -7" 3.95s 12714662 -
"lzop -8" 16.05s 12663957 -
"lzop -9" 16.08s 12663957 -
"gzip -1" 0.66s 11543233 + fast, but still about 6x slower than "lzop -3", 2x larger than "xz -5"
"gzip -2" 0.69s 11387129 -
"gzip -3" 0.87s 11267716 -
"gzip -4" 0.90s 10279413 + mediocre
"gzip -5" 1.23s 10055417 =
"gzip -6" 1.49s 9999987 =
"gzip -7" 2.46s 9129868 - use "xz -0" instead
"gzip -8" 8.32s 9111036 -
"gzip -9" 8.13s 9111036 -
"bzip2 -1" 5.35s 6772180 -
"bzip2 -2" 5.22s 6380453 -
"bzip2 -3" 5.20s 6258066 -
"bzip2 -4" 5.20s 6220169 -
"bzip2 -5" 5.31s 6088009 + fast enough, good compression ratio
"bzip2 -6" 5.41s 6214754 -
"bzip2 -7" 5.39s 6278196 -
"bzip2 -8" 5.50s 6334132 -
"bzip2 -9" 5.51s 6332409 -
"xz -0" 2.84s 8195444 + fast as "gzip -7"
"xz -1" 3.40s 8011244 -
"xz -2" 5.84s 7948420 - fast as bzip2, but bzip2 is 20% better
"xz -3" 11.38s 7920604 -
"xz -4" 11.14s 9403900 - ???
"xz -5" 34.19s 5513820 + 10% better than bzip2, but about 5x slower
"xz -6" 38.35s 5443904 + 10% better than bzip2, but about 6x slower
"xz -7" 44.47s 5446192 -
"xz -8" 49.87s 5447040 -
"xz -9" 52.19s 5446836 -
Скрипт:
#!/bin/bash
ARCS=(
"lzop -1" "lzop -2" "lzop -3" "lzop -4" "lzop -5" "lzop -6" "lzop -7" "lzop -8" "lzop -9"
"gzip -1" "gzip -2" "gzip -3" "gzip -4" "gzip -5" "gzip -6" "gzip -7" "gzip -8" "gzip -9"
"bzip2 -1" "bzip2 -2" "bzip2 -3" "bzip2 -4" "bzip2 -5" "bzip2 -6" "bzip2 -7" "bzip2 -8" "bzip2 -9"
"xz -0" "xz -1" "xz -2" "xz -3" "xz -4" "xz -5" "xz -6" "xz -7" "xz -8" "xz -9"
)
rm -rf test.sql.*
for ARC in "${ARCS[@]}"
do
cp -f test.orig.sql test.sql
echo -n "\"$ARC\" "
/usr/bin/time -f "%Us " $ARC test.sql 2>&1 | tr -d '\n' >"$ARC.log"
stat -c "%s" test.sql.* >>"$ARC.log"
cat "$ARC.log"
rm -rf test.sql.*
done
Хтось може пояснти чому найкращий результат дають "bzip2 -5" та "xz -6"? Свої дані дати не можу (це шматок дампу бази, в основному відгуки користувачів та різні параметри тих відгуків).