Linux下幾種常見壓縮方式測試對比

  • 2019 年 10 月 7 日
  • 筆記

Linux下幾種常見壓縮方式測試對比

? Written by Zak Zhu

參考

簡介

  1. gzip

    GZIP默認壓縮級別: 6

    GZIP最早有Jean-loup GaillyMark Adler創建, 用於UNIX系統的文件壓縮.現今已經成為Internet上使用非常普遍的一種數據壓縮格式

    HTTP協議上GZIP編碼是一種用來改進WEB應用程序性能的技術. 大流量的WEB站點常常使用GZIP壓縮技術來讓用戶感受更快的速度. 這一般是指WWW服務器中安裝的一個功能, 當有人來訪問這個服務器中的網站時, 服務器中的這個功能就將網頁內容壓縮後傳輸到來訪的電腦瀏覽器中顯示出來. 一般對純文本內容可壓縮到原大小的40%. 這樣傳輸就快了, 效果就是你點擊網址後會很快的顯示出來. 當然這也會增加服務器的負載.

  2. bzip2

    BZIP2默認壓縮級別: 9

    BZIP2是一個基於Burrows-Wheeler變換的無損壓縮工具, 能夠把普通的數據文件壓縮10%至15%

    優點:

    1. 能夠高效完成文件數據的壓縮. 這樣你就可以把硬盤中冗餘繁多的文件, 打包壓縮整理. 在網絡上傳送文件前, 可以先用bzip2打包壓縮文件, 以減少傳送時間, 提高效率.
    2. 開源免費
    3. 支持修復介質錯誤. 當你需要從包含了一些錯誤數據的備份磁盤上修復或者獲得含有錯誤數據的壓縮文件中的數據時, bzip2仍能完美的解壓出沒有被破壞的部分
    4. 輕量級工具. 它可以運行在任何含有ANSI C編譯器的32位或者64位的主機上
  3. xz

    Compression default is 6.

    Decompressor memory usage into account before using 7 – 9 !

    XZ Utils is free general-purpose data compression software with a high compression ratio. XZ Utils were written for POSIX-like systems, but also work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils.

    The core of the XZ Utils compression code is base on LZMA SDK, but it has been modified quite a lot to be suitable for XZ Utils. The primary compression algorithm is currently LZMA2, which is used inside the .xz container format. With typical files, XZ Utils create 30% smaller output than gzip and 15% smaller output than bzip2

測試

測試文件: ASCII text, 1888888888(1.8G)

  1. 比較壓縮時間
壓縮級別 gzip (s) bzip2 (s) xz (s)
1 21.4739179611 90.9501368999 68.3621289730
2 24.4609007835 89.7782618999 112.869837999
3 37.0476579666 90.6774659157 209.155833006
4 27.8122198582 87.3756139278 806.507110119
5 46.4609379768 92.8639438152 1033.03790808
6 69.8921849728 97.9297192097 1058.06829500
7 86.8752598763 98.1326341629 1137.82143497
8 122.764060020 99.1380150318 1258.49577117
9 158.335731030 99.2219679356 1333.39344907

測試結果:

  1. 默認壓縮級別情況下, 壓縮時間: gzip (69s) < bzip2 (99s) < xz (1058s)

  2. gzip從壓縮級別4開始, 壓縮時間明顯增長

    • bzip2壓縮級別1 – 5, 壓縮時間相差不大 (90s左右),
    • 6 – 9級別壓縮時間相差不大 (98s左右)

    • xz壓縮級別1 – 9, 壓縮時間呈遞增趨勢 (68 to 1333s).

    • 壓縮級別1, 壓縮時間和gzip -6差不多 (68s左右), 且比bzip2壓縮時間小, 除此之外, xz壓縮時間最長


  1. 比較壓縮大小

    壓縮級別 gzip (Byte) bzip2 (Byte) xz (Byte)
    1 506841552 (484M) 233216612 (223M) 75684736 (73M)
    2 502290692 (480M) 251739184 (241M) 41313244 (40M)
    3 490092139 (468M) 253543594 (242M) 44591692 (43M)
    4 474926100 (453M) 248566089 (238M) 33962656 (33M)
    5 475325349 (454M) 250965048 (240M) 44159936 (43M)
    6 484074122 (462M) 250394024 (239M) 45095856 (44M)
    7 484203655 (462M) 246139644 (235M) 45095856 (44M)
    8 486381873 (464M) 243782904 (233M) 45095856 (44M)
    9 486428743 (464M) 248720308 (238M) 45095856 (44M)

    測試結果:

    1. 默認壓縮級別情況下, 壓縮大小: gzip (462M) > bzip2 (238M) > xz (44M)

    2. gzip壓縮級別4和5發而壓縮後文件最小

      • bzip2壓縮級別1 – 9, 壓縮後文件相差不大(238M左右),
      • 壓縮級別1反而最小 (223M)

      • xz壓縮級別1, 壓縮後文件較大(73M),
      • 壓縮級別4, 壓縮後文件反而最小(33M).
      • 其他壓縮級別, 壓縮後文件相差不大(44M左右)

  1. 比較解壓時間

    壓縮級別 gzip (s) bzip2 (s) xz (s)
    1 12.9578359127 30.1166489124 13.7505700588
    2 11.8433420658 32.1003379822 11.4533679485
    3 11.7258040905 33.6896038055 12.3551590443
    4 9.99360084534 36.7211699486 11.7451989651
    5 9.72496008873 36.5580499172 13.2683560848
    6 9.68840789795 34.4556078911 12.3216309547
    7 9.15504908562 36.9242160320 12.6404900551
    8 9.19544315338 38.0099401474 12.1256840229
    9 9.78331804276 36.1473388672 12.9020321369

    測試結果:

    1. 默認壓縮級別情況下, 解壓時間: gzip (9s) < xz (12s) < bzip2 (36s)
    2. gzip壓縮級別1 – 9的文件, 解壓時間相差不大 (10s左右)
      • bzip2壓縮級別4 – 9的文件, 解壓時間相差不大 (36s左右),
      • 壓縮級別1的文件解壓時間最小 (30s)
    3. xz壓縮級別1 – 9的文件, 解壓時間相差不大 (12s左右)

總結

對於運維而言, 壓縮工具常用來備份文件. 下面所總結的也是針對備份功能.

  1. 壓縮和解壓過程都會佔用較大的CPU, 所以建議在業務低峰和機器空閑的時候執行壓縮(比如說計劃任務00:00後備份), 解壓的話也在業務低峰和機器空閑的時候操作
  2. gzip適用於快速壓縮和快速解壓的場景, 所以如果備份的話, 還是選擇其他壓縮
  3. 根據我的測試結果, bzip2如果用來備份文件的話, 建議用壓縮級別1
  4. 備份文件的場景, xz最具有優勢, 壓縮後文件最小, 解壓時間很快, 建議用默認壓縮級別

~歡迎各位討論和建議~

? Oh Yeah!