ログは圧縮したほうが、速く探せます — 1GBと3GBで7形式を測りました

技術解説

【追記 2026-10-16】いまの速さ — v1.9.0「Full Spectrum」で測り直しました

本文の uvf・uvp の数字は、開発版 Wide Field(1.7.1.6・2026年9月)のものです。同じ Mac・同じファイルを、いまの版 v1.9.0(2026年10月14日)で測り直しました。

3GB を「東京」で探す 本文(1.7.1.6) いま(v1.9.0)
uvp:.uwvz にしたあと(2回目から) 0.31〜0.40秒 0.15〜0.16秒(約2倍速く)
 同じく 1GB 0.14〜0.16秒 0.10秒
uvp の1回目(平文から .uwvz を作る・検索込み) 3.59秒 3.84秒(ほぼ同じ)
uvf:圧縮のまま探す(1回目・7形式) 0.89〜23.48秒 0.86〜22.32秒(ほぼ同じ。どの形式も rg -z と同等)

「圧縮したほうが平文より速く探せる」という本文の結論は、v1.9.0 でも同じです(rg -z の 3GB・1回目:lz4 0.94秒・gz 1.32秒・zst 1.62秒・xz 1.67秒・br 2.49秒 対 平文 3.31秒)。詳しくはベンチマークとv1.9.0「Full Spectrum」の記事。

ログは、そのまま置いておけません。古いものから圧縮して残します。このとき選ぶ形式を、どれだけ縮むかだけで決めていないでしょうか。

同じファイルを7つの形式で圧縮して、ripgrep で1語を探す時間を測りました。**結果は、縮み方の順番と速さの順番が一致しません。**そして多くの形式では、圧縮したファイルのほうが、平文より速く探せました。

おことわり: 記事の中の uvf・uvp・.uwvz の数字は、公開前の開発版 Wide Field(1.7.1.6) で測ったものです。Wide Field は 2026年9月29日に v1.7.3.6 として公開しました(追記)。公開版で測った数字は 実測まとめ にあります。形式どうしの比較(rg -z の数字)は、公開されている ripgrep 15.2.0 で測っています。

3GB を1語で探す

2,937.7MB のテキスト1本と、それを7形式で圧縮したものです。語は「東京」、どれもキャッシュを捨てた直後の1回目です。

形式 大きさ 元の何% rg -z で探す 平文比 uvf で探す rg 比
bz2 250.7MB 8.5% 24.93秒 1/7.5 23.48秒 1.06倍
lzma 254.1MB 8.7% 10.71秒 1/3.2 8.49秒 1.26倍
(平文) 2,937.7MB 100% 3.32秒 1 3.10秒 1.07倍
br 292.1MB 9.9% 2.53秒 1.3倍 2.25秒 1.12倍
xz 252.9MB 8.6% 1.79秒 1.9倍 1.88秒 1/1.05
zst 347.8MB 11.8% 1.63秒 2.0倍 1.54秒 1.06倍
gz 318.3MB 10.8% 1.36秒 2.4倍 1.07秒 1.27倍
lz4 532.6MB 18.1% 0.95秒 3.5倍 0.89秒 1.07倍
(参考)uvp:.uwvz にしたあと 329.6MB 11.2% — — 0.31〜0.40秒 —

uvf は無料版 UwView の検索コマンドで、圧縮ファイルを外部のコマンドを呼ばず、内蔵のデコーダで展開しながら探した時間です。どの形式も rg -z とほぼ同じ(1.5 倍未満)でした。最後の行は参考で、有料版 uvp がファイルを .uwvz(uvp 用の圧縮形式+索引)にしたあと、2回目以降に探す時間です(この記事の最後で触れます)。

平文より下の5つ(br・xz・zst・gz・lz4)は、平文より速い。 最後の .uwvz も、2回目以降は速い。5つの理由は単純で、ディスクから読む量が 1/5〜1/9 に減るからです。展開に使う時間より、読まずに済む時間のほうが大きい。外付け SSD の素読みが約950MB/s なので、2.9GB を読むだけで3秒かかります。318MB なら 0.3秒です。

平文より上の2つ(bz2・lzma)は、平文より遅い。 lzma と bz2 は、展開そのものが追いつきません。bz2 の展開は 118MB/s しか出ていません。

縮み方と探す速さの散布図。xz・gz・zst が左下(小さくて速い)にそろい、bz2 と lzma は同じくらい縮むのに探すのが遅い。lz4 は最速だが 18.1% と大きい

1GB でも、順番は同じでした

979.2MB の同じデータでも測りました。表の見方は 3GB と同じです。

形式 大きさ 元の何% rg -z で探す 平文比 uvf で探す rg 比
bz2 83.6MB 8.5% 7.50秒 1/6.6 7.40秒 1.01倍
lzma 84.7MB 8.7% 3.40秒 1/3.0 2.85秒 1.19倍
(平文) 979.2MB 100% 1.14秒 1 1.08秒 1.06倍
br 97.4MB 9.9% 0.88秒 1.3倍 0.71秒 1.24倍
xz 84.3MB 8.6% 0.64秒 1.8倍 0.68秒 1/1.06
zst 115.9MB 11.8% 0.59秒 1.9倍 0.69秒 1/1.17
gz 106.1MB 10.8% 0.45秒 2.5倍 0.38秒 1.18倍
lz4 177.5MB 18.1% 0.36秒 3.2倍 0.33秒 1.09倍
(参考)uvp:.uwvz にしたあと 109.9MB 11.2% — — 0.14〜0.16秒 —

縮み方の順番(bz2 < xz < lzma < br < gz < zst < lz4)も、速さの順番も、1GB と 3GB で変わりません。サイズが3倍になると、秒数もほぼ3倍になります。素直な比例です。

圧縮にかかる時間

保管するには、まず圧縮しなければなりません。ログが毎日たまるなら、この時間も毎日かかります。

3GBを圧縮する時間と、圧縮後の大きさ。bz2 は135秒で8.5%、xz は50秒で8.6%、zst は1.94秒で11.8%、gz は19.64秒で10.8%、lz4 は0.78秒で18.1%

形式 設定 圧縮 1GB 圧縮 3GB 1秒あたり(3GB) 大きさ(3GB)
bz2 bzip2 -9 45.22秒 135.44秒 22MB 250.7MB・8.5%
lzma lzma -3 38.24秒 119.38秒 25MB 254.1MB・8.7%
xz xz -3 16.88秒 50.00秒 59MB 252.9MB・8.6%
br brotli -q 5 6.72秒 19.98秒 147MB 292.1MB・9.9%
gz gzip -6 6.32秒 19.64秒 150MB 318.3MB・10.8%
zst zstd -3 0.67秒 1.94秒 1,514MB 347.8MB・11.8%
lz4 lz4 -1 0.29秒 0.78秒 3,766MB 532.6MB・18.1%
(参考).uwvz uvp(平文から) 1.26秒 3.59秒 818MB 329.6MB・11.2%

時間をかけても、そのぶん縮むとは限りません。 bz2 は 135秒かけて 8.5%、xz は 50秒で 8.6% と、3分の1の時間でほぼ同じ大きさです。そして zst は gz の10分の1の時間で終わります(1.94秒 対 19.64秒)。大きさはほぼ同じです(11.8% 対 10.8%)。zst と lz4 は、ディスクから読むのとほぼ同じ速さで圧縮が終わります。xz は並列で圧縮しても 50秒、bz2 と lzma は2分を超えます。

最下段の .uwvz は uvp 用の圧縮形式+索引で、平文から作る時間です(作成と1回目の検索を含む・Wide Field)。

xz・lzma・brotli は、既定より軽い設定で圧縮しています(既定は xz と lzma が -6、brotli が 11)。既定のままなら、もう少し小さくなるかわりに、圧縮はさらに遅くなります。

総合で選ぶ

圧縮は1回、大きさは保管しているあいだずっと、探すのは探すたび。3つを並べます。

3GBで、圧縮にかかる時間・圧縮後の大きさ・探す時間を並べた図。zst は3つとも上位。xz は圧縮に時間がかかるが最も小さい。bz2 と lzma は圧縮も探すのも遅い

形式 圧縮(1回) 大きさ 探す(毎回) 判定
bz2 135.44秒 8.5% 24.93秒 × 選ばない
lzma 119.38秒 8.7% 10.71秒 × 選ばない
br 19.98秒 9.9% 2.53秒 × ログには利点なし
lz4 0.78秒 18.1% 0.95秒 △ 書き込みが多いとき
xz 50.00秒 8.6% 1.79秒 ○ 長期保管・容量優先
gz 19.64秒 10.8% 1.36秒 ○ どこでも読める
zst 1.94秒 11.8% 1.63秒 ◎ 総合でいちばん
(参考).uwvz 3.59秒 11.2% 0.35秒 uvp 用の圧縮形式+索引(Wide Field)
  • 迷ったら zst。 圧縮は gz の10分の1、大きさと探す速さは gz とほぼ同じです。3つとも上位で、弱点がありません。
  • 相手の環境が分からないなら gz。 どこでも展開できます。圧縮に zst の10倍かかるのが代償です。
  • 長く置いておくなら xz。 一度だけ時間をかけて、いちばん小さく保管でき、それでも平文より速く探せます。ただしブロック分割が前提です。今回の xz は 245 ブロックで、外部の xz コマンドが並列で展開しています。1ブロックしかない xz(-T1 で作ったもの)は、探すのがずっと遅くなります。
  • ログが大量に流れ込むなら lz4。 圧縮は一瞬で、探すのも最速です。ただし 18.1% と大きいので、長期の保管には向きません。
  • br はログには向きません。 圧縮の時間は gz と同じ、大きさは少し小さいだけで、探すのは gz の2倍かかります。Web の配信のために作られた形式です。
  • bz2 と lzma は選ばない。 圧縮も探すのも遅く、大きさは xz と変わりません。すでに bz2 で残しているログがあるなら、zst か xz に詰め替える価値があります。

測り方

  • ファイル: OpenStreetMap 日本の XML を切り出した 979.2MB と 2,937.7MB。3GB のほうは同じ内容を3回つないだものです。繰り返しの間隔が各形式の窓より長いため、圧縮率は 1GB とほぼ同じ値になります
  • 語: 東京(1GB で 1,145件・3GB で 3,435件)
  • 圧縮の設定は gzip -6・bzip2 -9・xz -3・lzma -3・zstd -3・lz4 -1・brotli -q 5(gz・bz2・zst・lz4 は既定、xz・lzma・brotli は既定より軽い)。xz 5.6 以降は既定で並列に圧縮し、複数のブロックになる(1GB で 82・3GB で 245 ブロック)
  • 圧縮の時間は、キャッシュを捨てずに1回だけ測った参考値
  • 各測定は、sync → キャッシュ破棄 → 10秒待機 → 1回目(cold)→ 続けて2回目(hot)
  • ripgrep 15.2.0 の -z。rg -z は外部のコマンド(gzip・bzip2・xz など)を呼んで展開します
  • Mac(Apple M4・10コア)/外付け USB SSD。秒数は環境によって変わります
  • すべての測定で、平文を探した結果と件数が一致することを確認しています(各20項目・不一致0)

私たちの道具では

ここからは自分の製品の話です。UwView の検索コマンドは、外部のコマンドを呼ばずに内蔵のデコーダで展開します。その差が出るかを、同じ条件で測りました。

無料版の uvf は、どの形式も rg -z と同等でした。 3GB の2回計で gz 1.29倍・lzma 1.26倍・br 1.15倍・lz4 1.09倍・zst 1.07倍・xz 1/1.07 と、すべて 1.5 倍未満です。外部プロセスを介さないぶん有利なはずですが、差と呼べるほどではなく、いちばん不利な xz では外部の xz の並列展開にわずかに届いていません。

有料版の uvp は、圧縮ファイルをいったん .uwvz(uvp 用の圧縮形式+索引)に変換して、以後はそちらを探します。 上の表の最後の行がそれで、探す時間は形式に関係なく 0.31〜0.40秒でした。1回目(.uwvz への変換込み)も、どの形式でも rg -z の 1.5 倍以内に収まりました(gz 1.82秒 対 1.36秒、bz2 24.41秒 対 24.93秒 など)。bz2 で保管していても、xz で保管していても、変換したあとは同じです。元の形式の違いは、変換のときに1回だけ効きます(bz2 からの変換は 24.41秒、lz4 からなら 1.34秒)。

これは「速い検索」というより、保管の形を変える話です。圧縮したまま置いて毎回展開するか、索引に変えて毎回の展開をやめるか。前者は容量が小さく、後者は探すのが速い。.uwvz は 11.2% なので、容量は zst と同じくらいのまま、探す時間だけ 0.3秒台に落とせる、という位置づけになります。元のファイルは消せます(-extract で戻せます)。

変換の費用は、探す回数で割って考えます。bz2 なら1回探すごとに 24.5秒の差がつくので、1回目から元が取れます。gz なら 0.96秒の差なので2回目です。

.uwvz の大きさは、元の形式に関係なく同じでした(3GB から 329.6MB・11.2%)。どの形式で保管していても、索引にした時点で zst と同じくらいの大きさに落ち着く、ということです。

この計測は、公開前の開発版 Wide Field(1.7.1.6) のものです。Wide Field は 2026年9月29日に v1.7.3.6 として公開しました(リリースノート)。7形式をそのまま探すのは、無料版の uvf でできます。.uwvz に変えて探すのは、有料版 UwView Pro の uvp です。
無料の UwView は GitHub Releases から。Mac は brew install --cask amru195704/uwview/uwview、Windows は Scoop(scoop bucket add uwview https://github.com/amru195704/scoop-uwview → scoop install uwview)でも入ります。

タイトルとURLをコピーしました