Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


2.2.1 ローストア表とカラムストア表

実表には,ローストア表とカラムストア表があり,それぞれ表データの格納形式が異なります。業務内容や表の利用方法によって,これら2つの表を使い分けると,表の検索性能の向上が見込まれます。

〈この項の構成〉

(1) ローストア表およびカラムストア表とは

表データの格納形式には,ローストア形式とカラムストア形式の2つがあり,表を定義するときに表データの格納形式を指定することができます。表データの格納形式にローストア形式を選択して定義した表をローストア表といい,表データの格納形式にカラムストア形式を選択して定義した表をカラムストア表といいます。

ローストア表には,ローストア形式でデータが格納されます。カラムストア表には,カラムストア形式でデータが格納されます。ただし,カラムストア表に対してINSERT文やUPDATE文を実行した場合,追加・更新したデータは,ローストア形式でカラムストア表に格納されます。

■カラムストア表と,表データの格納形式の関係
  • カラムストア表にadbimportコマンドでインポートしたデータは,カラムストア形式で格納されます。

  • カラムストア表にINSERT文やUPDATE文で追加・更新したデータは,ローストア形式で格納されます。

メモ

バージョン04-01より前のバージョンのHADBサーバで定義した表は,ローストア表になります。

(2) ローストア形式とは

データを行単位でデータベースに格納する形式のことをローストア形式といいます。ローストア形式の場合,1行のデータが1レコードとしてデータベースに格納されます。ローストア形式の場合のデータ格納形式を次の図に示します。

図2‒4 ローストア形式の場合のデータ格納形式

[図データ]

[説明]

メモ

ページ,セグメントについては,「2.4.3 DBエリアの構造(セグメントとページ)」を参照してください。

■ローストア表に適した検索

ローストア表の場合,データが行単位で格納されているため,次のような検索をするときに適しています。

  • 行単位でデータにアクセスするような検索をする場合

    例えば,次のように,選択式に*を指定したSELECT文を実行する場合が該当します。

    SELECT * FROM "T1" WHERE "C1">=DATE'2017-09-06'

    また,選択式にほぼすべての列を指定するような場合も該当します。

  • 検索対象のデータを,B-treeインデクスを使用して絞り込むような検索をする場合

    表の検索が実行された場合,HADBサーバは,検索対象の行が格納されているページだけを読み込みます。そのため,B-treeインデクスを使用して検索対象の行を絞り込むことができる場合は,読み込むページ数を削減することができます。

(3) カラムストア形式とは

データを列単位でデータベースに格納する形式のことをカラムストア形式といいます。カラムストア形式の場合,表の各列のデータが列ごとにまとまってデータベースに格納されます。カラムストア形式の場合のデータ格納形式を次の図に示します。

図2‒5 カラムストア形式の場合のデータ格納形式

[図データ]

[説明]

メモ

ページ,セグメントについては,「2.4.3 DBエリアの構造(セグメントとページ)」を参照してください。

■カラムストア表に適した検索

カラムストア表の場合,データが列単位でまとまって格納されているため,次のような検索をするときに適しています。

  • 検索対象のデータをあまり絞り込まないで,特定の列データ全体を検索する場合

  • 特定の範囲内(特定の年や月など)の,特定の列データにアクセスする場合

  • 特定の列データに対する値の集計(平均や合計などを求める)をすることが多い場合

  • 特定の列データのグループ化をすることが多い場合

表の検索が実行された場合,HADBサーバは,検索対象の列データが格納されているセグメントを最初に探します。そのあとに,セグメント内の,検索対象の列データが格納されているページを読み込みます。そのため,特定の列データの集計をする場合は,集計対象の列データが格納されているページだけにアクセスすればよいため,読み込むページ数を削減することができます。

■列データの圧縮方式

カラムストア表にデータをインポートする際,各列のデータは圧縮されて表に格納されます。列データの圧縮方式には,幾つかの種類があります。列データの圧縮方式の種類については,「5.2.2 ローストア表とカラムストア表の選択基準」の「(4) カラムストア表の列データの圧縮方式」を参照してください。

メモ

カラムストア表にデータをインポートする際,インポートするデータを基に,HADBサーバが自動的に圧縮方式を選択します。また,カラムストア表を定義する際に,列データの圧縮方式を選択することもできます。

■カラムストア形式のデータの削除と,無効情報管理用ページの関係

カラムストア表に格納されているカラムストア形式のデータをDELETE文で削除すると,対象のデータは無効となります。ディスクからは削除されません。

さらに,HADBサーバは,対象のデータが無効になったことを示す情報を無効情報管理用ページで管理します。カラムストア表に対してDELETE文を実行すると,無効情報管理用ページが確保される分,データ用DBエリアの空き容量が減ります。

そのため,データ用DBエリアの空き容量が少ない場合に,カラムストア形式のデータをDELETE文で削除すると,空き容量不足でエラーとなるおそれがあります。

■カラムストア表に対してINSERT文またはUPDATE文を実行する場合

カラムストア表に対してINSERT文またはUPDATE文を実行すると,追加または更新されたデータはローストア形式でカラムストア表に格納されます。カラムストア表にローストア形式のデータが格納された場合,カラムストア表の特性が生かされなくなるおそれがあります。例えば,特定の列データにアクセスする際の検索性能が低下したり,データの圧縮率が低下したりします。そのため,カラムストア表に対してINSERT文またはUPDATE文を実行することがある場合は,更新行のカラム化機能を有効にすることを推奨します。更新行のカラム化機能を有効にすると,HADBが,カラムストア表内のローストア形式のデータをカラムストア形式に自動的に変換します。更新行のカラム化機能については,「11.18 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。