MySQLからmysqldumpで引っ張り出した巨大なSQLファイルがある。そのサイズはざっと100GBくらい。そのデータをそのままストレージに転がしておくのは非効率なので、当然圧縮する。

そこで、圧縮プログラムの選択となるのだが、何も考えずにgzipで圧縮していたら、圧縮後のファイルサイズはだいたい元のファイルの50%くらい。それでも、まだファイルサイズが大きいので、次にbzip2を試してみた。確かに、圧縮率は向上していて、元のファイルの40%くらいまで圧縮することができた。しかし、圧縮にかかる処理時間は3倍くらいに大幅に伸びてしまった。

確か、gzipには「–fast」とか「–best」とかのオプションがあり、圧縮率と処理速度をトレードオフに、ある程度、調整できそうだったのでbzip2も調べてみたところ、gzipと同じような「–fast」とか「–best」とかのオプションがあることがわかった。

で、「man bzip2」でオプションについて調べてみたところ、以下のような記述が…。

圧縮の場合、ブロックサイズを100 k, 200 k .. 900 kに設定する。 伸長の場合、何も影響を及ぼさない。以下の「メモリ管理」セクションを参照すること。 –fast と –best エイリアスは、主として GNU gzipとの互換性のためにある。特に –fast オプションで目に見えて速くなる訳ではない。また –best は単にデフォルトの動作を選択するだけである。

加えて、その周辺も読んでみた感じ、要は、bzip2の場合、「–best」は「-9」と同値で、これがデフォルト値。「–fast」は「-1」と同値であるが、この「-9」から「-1」のオプションは、bzip2が圧縮処理を行う時のメモリー使用量に反映されるオプションであって、圧縮の処理速度を(圧縮率を犠牲にして)向上させるようなものではないらしい。

…bzip2の「–best」とか「–fast」がgzipとの互換性というか、同じようなオプション体系にするために存在しているオプションであることはわかったけれども、オプションがメモリー使用量に反映されるってのは、なんか混乱してしまうような気がしないでもない。