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
整理したものが、下図です。
bzip2の圧縮率の高さが際立つ。1.0E+07バイト(10メガバイト)のオリジナルファイルをbzip2で圧縮すると49バイトに、1.0E+09バイト(1ギガバイト)を圧縮すると722バイトに縮減される。
xzは1.0E+07バイトを超えたあたりで圧縮率に上限が来るが、bzip2はずっと圧縮率が高まり続ける。
前項の言い換えになるが、xzのスケーラビリティには上限がありそう。オリジナルファイルが1.0E+08バイトから1.0E+09バイトに10倍になったとき、bzip2圧縮後のファイルサイズは6.3894倍であるのに対し、xz圧縮後のファイルサイズは9.9199倍でほぼ10倍のまま。
今日覚えたこと
spotifyの公開プレイリスト「昭和歌謡」がイイ
旅行日程中に降雨の予報
今日はbzip2で逃避した
明日やること
明日は逃避しない、というか、今日の夜からがんばる
この記事が気に入ったらサポートをしてみませんか?