3.3.16 圧縮表
HiRDBが表にデータを格納するとき,データを圧縮して格納できます。これをデータ圧縮機能といいます。データの圧縮は列単位に指定でき,圧縮を指定した列を圧縮列といい,圧縮列がある表を圧縮表といいます。圧縮表については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
HiRDBがデータを圧縮することで,次のメリットがあります。
-
データベースの容量を削減できる。
-
UAP側でデータ圧縮処理を実装する必要がない。
データ圧縮の概要を次の図に示します。
- 〔説明〕
-
HiRDBがデータの圧縮及び伸張処理を実行するため,ユーザはデータの圧縮及び伸張を指示する必要はありません。
- 〈この項の構成〉
(1) 適用基準
画像,音声など,容量が大きい可変長バイナリデータを含む表を圧縮表にすることをお勧めします。ただし,圧縮表の場合,圧縮処理や伸張処理によるオーバヘッドが掛かります。このため,性能よりも格納効率を重視するシステムで使用してください。
(2) データ圧縮の仕組み
データ圧縮時に使用する圧縮ライブラリはzlibです。HiRDBは,zlibを使用して表定義時に指定した圧縮分割サイズ(省略値:MIN(32,000バイト,圧縮列の定義長))ごとに圧縮します。このとき,圧縮前後のデータの情報を管理するヘッダ領域(8バイト)を圧縮分割サイズごとに追加します(zlibが圧縮データに付与するヘッダ領域とは別に追加します)。
ただし,圧縮前後のデータ長が同じ,又は圧縮後のデータ長の方が長くなる場合,HiRDBはデータを圧縮しないで格納します。このため,ヘッダ領域の付与によって,圧縮後のデータサイズが圧縮前よりも大きくなることがあります。圧縮前後のデータを次の図に示します。
(3) 圧縮表の定義方法
定義系SQLのCREATE TABLEの列定義で圧縮指定(COMPRESSED)をします。必要に応じて,圧縮分割サイズも指定します。ただし,圧縮指定には次の条件があります。
-
圧縮指定は列単位に指定します(表単位に指定することはできません)。
-
圧縮指定できるのは,次のデータ型の列だけです
-
定義長が256バイト以上のBINARY型
-
抽象データ型(XML型)※
-
- 注※
-
抽象データ型(XML型)の列のデータを圧縮するためには,バージョン09-03以降のHiRDB XML Extensionが必要です。
(4) 圧縮表使用時の留意事項
-
圧縮列のデータをSQLやユティリティで操作する場合,圧縮処理や伸張処理のオーバヘッドが掛かります。
-
圧縮対象となるデータの実態によって異なりますが,圧縮分割サイズが大きいほどデータの圧縮効率は上がります。ただし,圧縮分割サイズを大きくすると,圧縮列に対するデータの格納及び抽出が発生するSQL(SUBSTR関数やPOSITION関数を使用したり,後方削除更新をしているSQL)を実行する場合にSQL実行時に確保するプロセス固有領域が増加します。
-
共有モードで圧縮表のリバランスを実行する場合,データの伸張及び圧縮を行うため,圧縮列がない場合に比べてリバランス処理に掛かる時間が長くなることがあります。実行時間を短縮したい場合は,占有モードで実行してください。