圧縮
gzip
バックアップ
GIS

GIS関連ファイルのバックアップ用圧縮形式はどれが良いのか?

はじめに

GIS関連(特にDEMファイル)によってHDDが逼迫してきたので、効率良いバックアップ方法を模索することに。
Webに比較記事は山ほどあれど、圧縮する対象によって圧縮率はそれなりに変わるのでやはり自分のニーズでのパフォーマンスを知りたい。
また最近台頭してきている速度を優先した圧縮形式(lz4, lzopなど)の実力も興味があって、比較してみることにした。

そこで今回は以下のLiDARのDEMデータをメインとしつつ、ちょっぴりその他のデータも入っているフォルダで実験してみた。
fig1.jpg

計測

  • Windows 10 64bit / Core-i7 6700HQ / 16GB DDR4
  • USB3.0 UARTで繋いだ外付SSD → SATA3.0で繋いだ内蔵2.5" HDD
  • すべての圧縮方法で最も速度を優先するオプションを使用した。
  • lz4(r128), lzop(1.03), 7zip/zip(17.01b), pigz(2.31), pbzip2(1.19), pixz(1.06), gzip(1.6), bzip2(1.06), xz(5.1.0)

7zipとzip以外は、Bash on Windowsからtimeを使って以下のコマンドラインの総所要時間を計測
cp -R ./US_Inyo /mnt/d
tar cvf - ./US_Inyo | lz4 - /mnt/d/US_Inyo.tar.lz4
tar cvf - ./US_Inyo | lzop -1 -o /mnt/d/US_Inyo.tar.lzo
tar cvf - ./US_Inyo | pigz -1 > /mnt/d/US_Inyo.tar2.gz
tar cvf - ./US_Inyo | pbzip2 -1 > /mnt/d/US_Inyo.tar2.bz2
tar cvf - ./US_Inyo | gzip -1 > /mnt/d/US_Inyo.tar.gz
tar cvf - ./US_Inyo | bzip2 -1 > /mnt/d/US_Inyo.tar.bz2
tar cvf - ./US_Inyo | xz -1 > /mnt/d/US_Inyo.tar.xz

結論

クアッドコアの高速なCPUを使える場合はpigz(マルチスレッド化されたgzip)が非常に優れており、しかしCPU性能の低いPCで使う場合や、バックアップを行いながら他の作業もしたい場合はlz4/lzopが検討に値する、といった感じ。
fig2.jpg

pigz (https://zlib.net/pigz/)

  • 超古参のgzipがこれほど速いとは思わなかった(正直な感想)
  • それがマルチスレッド化されてクアッドコアCPUで走るとlz4/lzopに猛烈に迫る値に
  • 一般的なHDDのシーケンシャルライト性能に近い速度(100MB/s)を達成しているのも、バランスが取れていて無駄がなくポイントが高い。
  • 圧縮レベルを上げても時間が伸びるだけで圧縮率は殆ど減らなかった

lz4lzop

  • 軽すぎてディスク側がボトルネックに(下のベンチマーク参照)。
  • 圧縮率はイマイチで、70%近いのはちょっと残念。圧縮レベルを上げても殆ど改善しなかった。データ構造が向いていないのかもしれない。
  • 性能の低いCPU(Core-m3など)で使う場合や、バックアップしながら同時に重い作業もしたい場合などには有効か。
  • 今回は検証しなかったが、解凍速度的にlzopよりlz4にアドバンテージがあるらしい。 fig2.jpg

zstd (http://facebook.github.io/zstd/)

  • 新鋭の圧縮規格らしい。pigzを上回るスループットを誇る。今後の普及に期待。
  • 対応した7zipの派生版もある。

7zip (http://www.7-zip.org/)

  • 今まで使っていたやつ。比較した中では最も高い圧縮率を達成し、マルチスレッド化されていて所要時間も悪くはない。
  • しかしpigzが速すぎて霞んでしまう。
  • WindowsでGUIが必要な場合はこれを使っておけば悪くはないか。

参考にさせてもらったページ