2009年6月27日土曜日

圧縮機能で遊んでみる

Unofficial DB2 blog であつ~く語られていた、DB2 V9.x からの圧縮機能で遊んでみました。

使用するサンプルデータは、日本郵便が提供する、全国事業所郵便番号を使用しました。
まぁこれが個人の住所なりのデータと想定します。

事業所の個別郵便番号(CSV形式)
ダウンロードはこちらです。
データは2万4千件程度、少ないけど、誰でも入手できるデータって事で。

さて、準備です。

データベースを作成します。

db2 create db test

圧縮効果を見やすくするために、表スペースを分けておきます。
4個くらい作っとくかな。

db2 create tablespace tbs1
db2 create tablespace tbs2
db2 create tablespace tbs3
db2 create tablespace tbs4

tbs1 表スペースに zip1表を作成
-------------------------------------
CREATE TABLE ZIP1 (
C1 varchar(5),
C2 varchar(200),
C3 varchar(400),
C4 varchar(20),
C5 varchar(50),
C6 varchar(50),
C7 varchar(250),
C8 varchar(7) NOT NULL,
C9 varchar(5),
C10 varchar(80),
C11 varchar(1),
C12 varchar(1),
C13 varchar(1)
) in tbs1;


tbs2 表スペースに zip2表(圧縮表)を作成
-------------------------------------
CREATE TABLE ZIP2 (
C1 varchar(5),
C2 varchar(200),
C3 varchar(400),
C4 varchar(20),
C5 varchar(50),
C6 varchar(50),
C7 varchar(250),
C8 varchar(7) NOT NULL,
C9 varchar(5),
C10 varchar(80),
C11 varchar(1),
C12 varchar(1),
C13 varchar(1)
) in tbs2 COMPRESS YES;
-------------------------------------

COMPRESS YES たったこれだけ!これだけです。シンプル~

で、次に、郵便のデータ(JIGYOSYO.CSV )をロードします。

db2 load from JIGYOSYO.CSV of del insert into zip1 nonrecoverable
db2 load from JIGYOSYO.CSV of del insert into zip2 nonrecoverable

できたー

さて、どれぐらい圧縮されたか見てみますか。

db2pd -db test -tcbstats all

TCB Table Information の 作成したテーブル名のDataSizeを見ます。
単位はページです。
------------------------------------------------------------------------
TCB Table Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize LfSize LobSize XMLSize
0x7640EA38 3 4 n/a 3 4 ZIP1 GOOFY Perm 974 0 0 0
0x76402138 4 4 n/a 4 4 ZIP2 GOOFY Perm 889 0 0 0
------------------------------------------------------------------------

974 → 889 おぉ!あれ?圧縮されてるけど、いまいちやね…4割は堅いって言ってたのに…

ちょっと解説
compress yes で表を作成して、初回、データが入ってくると、自動的に辞書を作成してくれる。
マニュアルの辞書の自動作成をみると、最初のデータで辞書を作成して、その辞書で圧縮をかけるみたい。
ってことわ、郵便番号データはソートされているから、最初のデータっていうと、北海道とかの住所などのデータで辞書が作成されているって訳ね。つまり、辞書に網羅性がないと。

じゃぁ、辞書を再作成するかってことで、再編成を実施。
辞書の再作成は、再編成でやります。

db2 REORG TABLE GOOFY.ZIP2 RESETDICTIONARY

さてさて、結果は。

もっかい db2pd -db test -tcbstats all

------------------------------------------------------------------------
TCB Table Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize LfSize LobSize XMLSize
0x7640EA38 3 4 n/a 3 4 ZIP1 GOOFY Perm 974 0 0 0
0x76402138 4 4 n/a 4 4 ZIP2 GOOFY Perm 488 0 0 0
------------------------------------------------------------------------
974 → 488  半分になりました~!

0 件のコメント:

コメントを投稿