見出し画像

2023年2月4日(土)

春立や見古したれど筑波山

小林一茶

今日から春です。昨日までよりも少しだけ景色が違って見えそうな、そんなぽかぽか陽気な一日でした。

圧縮アルゴリズムのbzip2とxzの比較で、面白いことが分かったので、書いてみます。

再現性のため、単一のアスキー文字(ここでは"0"にしました)からなるテキストファイルを用意します。スケーラビリティを見たいので、下図のように10倍ずつサイズを変えたものを作りました。ちなみに「0x10_9」のファイルは10億バイト(約1ギガバイト)になります。

% ruby -e 'print "0"*10' >0x10_1
% ruby -e 'print "0"*10**2' >0x10_2
...
% ruby -e 'print "0"*10**9' >0x10_9
% ls -l 0x10_*
-rw-r--r--  1 akyswd  users          10 Feb  4 17:12 0x10_1
-rw-r--r--  1 akyswd  users         100 Feb  4 17:12 0x10_2
-rw-r--r--  1 akyswd  users        1000 Feb  4 17:12 0x10_3
-rw-r--r--  1 akyswd  users       10000 Feb  4 17:13 0x10_4
-rw-r--r--  1 akyswd  users      100000 Feb  4 17:13 0x10_5
-rw-r--r--  1 akyswd  users     1000000 Feb  4 17:14 0x10_6
-rw-r--r--  1 akyswd  users    10000000 Feb  4 17:14 0x10_7
-rw-r--r--  1 akyswd  users   100000000 Feb  4 17:14 0x10_8
-rw-r--r--  1 akyswd  users  1000000000 Feb  4 17:14 0x10_9

bzip2もxzも、圧縮率を最大にして実行。bzip2は下図のような感じです。

% bzip2 -9 0x10_*
% ls -l 0x10_*
-rw-r--r--  1 akyswd  users   39 Feb  4 17:12 0x10_1.bz2
-rw-r--r--  1 akyswd  users   39 Feb  4 17:12 0x10_2.bz2
-rw-r--r--  1 akyswd  users   45 Feb  4 17:12 0x10_3.bz2
-rw-r--r--  1 akyswd  users   44 Feb  4 17:13 0x10_4.bz2
-rw-r--r--  1 akyswd  users   47 Feb  4 17:13 0x10_5.bz2
-rw-r--r--  1 akyswd  users   48 Feb  4 17:14 0x10_6.bz2
-rw-r--r--  1 akyswd  users   49 Feb  4 17:14 0x10_7.bz2
-rw-r--r--  1 akyswd  users  113 Feb  4 17:14 0x10_8.bz2
-rw-r--r--  1 akyswd  users  722 Feb  4 17:14 0x10_9.bz2

1ギガバイトのテキストファイルが722バイトまで圧縮されちゃった。xzなら、下図の通りでした。

% bunzip2 0x10_*
% xz -9 0x10_*
% ls -l 0x10_*
-rw-r--r--  1 akyswd  users      68 Feb  4 17:12 0x10_1.xz
-rw-r--r--  1 akyswd  users      68 Feb  4 17:12 0x10_2.xz
-rw-r--r--  1 akyswd  users      76 Feb  4 17:12 0x10_3.xz
-rw-r--r--  1 akyswd  users     108 Feb  4 17:13 0x10_4.xz
-rw-r--r--  1 akyswd  users     148 Feb  4 17:13 0x10_5.xz
-rw-r--r--  1 akyswd  users     276 Feb  4 17:14 0x10_6.xz
-rw-r--r--  1 akyswd  users    1584 Feb  4 17:14 0x10_7.xz
-rw-r--r--  1 akyswd  users   14676 Feb  4 17:14 0x10_8.xz
-rw-r--r--  1 akyswd  users  145584 Feb  4 17:14 0x10_9.xz

整理したものが、下図です。

very simple compression algorithm scalability testing : bzip2 and xz
  1. bzip2の圧縮率の高さが際立つ。1.0E+07バイト(10メガバイト)のオリジナルファイルをbzip2で圧縮すると49バイトに、1.0E+09バイト(1ギガバイト)を圧縮すると722バイトに縮減される。

  2. xzは1.0E+07バイトを超えたあたりで圧縮率に上限が来るが、bzip2はずっと圧縮率が高まり続ける。

  3. 前項の言い換えになるが、xzのスケーラビリティには上限がありそう。オリジナルファイルが1.0E+08バイトから1.0E+09バイトに10倍になったとき、bzip2圧縮後のファイルサイズは6.3894倍であるのに対し、xz圧縮後のファイルサイズは9.9199倍でほぼ10倍のまま。

今日覚えたこと

  1. spotifyの公開プレイリスト「昭和歌謡」がイイ

  2. 旅行日程中に降雨の予報

  3. 今日はbzip2で逃避した

明日やること

  1. 明日は逃避しない、というか、今日の夜からがんばる

この記事が気に入ったらサポートをしてみませんか?