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