Автор Гілка: Порівняння архіваторів  (Прочитано 4883 раз)

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Я на роботі провів тести архіваторів на наших реальних даних, для потреб архівування дампу бази даних. Отримав несподівані результати:

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"? Свої дані дати не можу (це шматок дампу бази, в основному відгуки користувачів та різні параметри тих відгуків).
[Fedora Linux]

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3636
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Порівняння архіваторів
« Відповідей #1 : 2013-05-20 23:18:52 »
Різний розмір блоків призводить до різної ефективності кодування. Загалом кажучи, збільшення розміру блоку має збільшувати ефективність стискання нескінченно великого масиву даних, але ваш масив є скінченним, тому найкращим є характерне для складності масиву значення розміру блоку.
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Порівняння архіваторів
« Відповідей #2 : 2013-05-22 16:32:59 »
Потестував на більшому шматку — та сама фігня з bzip2 і xz:
Original file size:    211962671
"lzop -1"      0.59s      85203476
"lzop -2"      0.58s      84592000
"lzop -3"      0.60s      84592000 +
"lzop -4"      0.54s      84592000
"lzop -5"      0.55s      84592000
"lzop -6"      0.58s      84592000
"lzop -7"      14.08s      66935526
"lzop -8"      39.87s      66679021
"lzop -9"      42.51s      66679007
"gzip -1"      2.90s      59185441 +
"gzip -2"      3.05s      58412398
"gzip -3"      3.71s      57564176
"gzip -4"      4.37s      53764984
"gzip -5"      5.55s      52457566
"gzip -6"      6.55s      52199413
"gzip -7"      8.51s      50325526
"gzip -8"      18.79s      50270250 -
"gzip -9"      20.02s      50270211 -
"bzip2 -1"      19.82s      42777861 -
"bzip2 -2"      19.56s      41993255 -
"bzip2 -3"      20.04s      41759701 -
"bzip2 -4"      20.30s      41642877 -
"bzip2 -5"      20.57s      41416218 +
"bzip2 -6"      20.78s      41504910 -
"bzip2 -7"      21.58s      41538501 -
"bzip2 -8"      21.24s      41550044 -
"bzip2 -9"      21.93s      41522587 -
"xz -0"            13.76s      49560520 +
"xz -1"            20.17s      46922512
"xz -2"            40.01s      46128264
"xz -3"            79.35s      45791260
"xz -4"            66.78s      44243260
"xz -5"            128.84s      36568476
"xz -6"            158.71s      36565916
"xz -7"            181.05s      36552088
"xz -8"            204.53s      35664980 +
"xz -9"            220.04s      36574492 -

Код: Bash
  1. #!/bin/bash
  2.  
  3. ARCS=(
  4.   "lzop -1" "lzop -2" "lzop -3" "lzop -4" "lzop -5" "lzop -6" "lzop -7" "lzop -8" "lzop -9"
  5.   "gzip -1" "gzip -2" "gzip -3" "gzip -4" "gzip -5" "gzip -6" "gzip -7" "gzip -8" "gzip -9"
  6.   "bzip2 -1" "bzip2 -2" "bzip2 -3" "bzip2 -4" "bzip2 -5" "bzip2 -6" "bzip2 -7" "bzip2 -8" "bzip2 -9"
  7.   "xz -0" "xz -1" "xz -2" "xz -3" "xz -4" "xz -5" "xz -6" "xz -7" "xz -8" "xz -9"
  8. )
  9.  
  10. rm -rf test.sql.*
  11. for ARC in "${ARCS[@]}"
  12. do
  13.   cp -f test.orig.sql test.sql
  14.   echo -n "\"$ARC\"<--->"
  15.   /usr/bin/time -f "%Us>" $ARC test.sql 2>&1 | tr -d '\n'
  16.   stat -c "%s" test.sql.*
  17.  
  18.   rm -rf test.sql.*
  19.  
  20. done
  21.  
« Змінено: 2013-05-22 16:36:40 від lvm »
[Fedora Linux]

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3636
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Порівняння архіваторів
« Відповідей #3 : 2013-05-22 16:34:52 »
Результат залежить не від об’єму даних, а від рівня словникової складності самих даних (блоки, за якими виконується архівування у обох випадках мають однакові розміри).
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Порівняння архіваторів
« Відповідей #4 : 2013-05-22 17:04:01 »
Спробував pbzip2 — працює довше, стискає гірше (на чотирьохядерному i5):

"pbzip2 -1"      28.05s      42792704
"pbzip2 -2"      28.26s      42090036
"pbzip2 -3"      29.36s      41785840
"pbzip2 -4"      30.20s      41760107
"pbzip2 -5"      31.38s      41512340 +
"pbzip2 -6"      31.64s      41611605
"pbzip2 -7"      32.69s      41644869
"pbzip2 -8"      34.19s      41690720
"pbzip2 -9"      36.56s      41538515

[smiley=dash2.gif]
« Змінено: 2013-05-22 17:05:03 від lvm »
[Fedora Linux]