Hitachi

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


5.2.2 ローストア表とカラムストア表の選択基準

ここでは,表をローストア表として定義するか,カラムストア表として定義するかの選択基準について説明します。

〈この項の構成〉

(1) カラムストア表の制限事項

カラムストア表には,次に示す運用上の制限事項があります。これらの制限事項によって運用上の問題が発生する場合は,表をローストア表として定義してください。

(2) 表をローストア表として定義するか,またはカラムストア表として定義するかの選択基準

表をローストア表として定義するか,またはカラムストア表として定義するかは,次の表に示す選択基準を基に決定してください。

表5‒1 ローストア表とカラムストア表の選択基準

定義する表に対してどのような検索をするか,または定義する表の特徴

適している表の種類

定義する表に対して行われる検索

次のような検索が実行される表の場合

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

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

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

ローストア表

次のような検索が実行される表の場合

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

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

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

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

カラムストア表

定義する表に対して行われる操作

  • データの追加,更新,削除を行う表の場合

    INSERT文,UPDATE文,およびDELETE文に対する処理性能はローストア表の方が優れています。また,カラムストア表に対して,INSERT文,UPDATE文,およびDELETE文を実行した場合,実行後の検索性能が低下することがあります。そのため,定型的な業務でSQL文によるデータの追加,更新,削除を行う場合は,ローストア表として定義してください。

ローストア表

定義する表のデータ容量

  • データ容量が比較的小さい表の場合

    表のデータ容量,または1回のデータインポートで格納するデータ容量が,比較的小さい表が該当します。目安としては,データインポートの際の入力データファイルのサイズが1ギガバイト未満の表が該当します。

    なお,ローストア表のデータ容量は,データインポートの際の入力データファイルのサイズの約2倍になります。ただし,この数値は,インポートするデータの内容によって変動があります。

    通常,ローストア表のデータ容量は,カラムストア表のデータ容量より大きくなります。

ローストア表

  • データ容量が大きい表の場合

    表のデータ容量,または1回のデータインポートで格納するデータ容量が大きい表が該当します。目安としては,入力データファイルのサイズが1ギガバイト以上の表が該当します。

    なお,カラムストア表のデータ容量は,データインポートの際の入力データファイルのサイズの約1/2になります。ただし,この数値は,インポートするデータの内容によって変動があります。

    通常,カラムストア表のデータ容量は,ローストア表のデータ容量より小さくなります。

カラムストア表

データウェアハウスでの使い方

  • 解析対象のデータを格納する表と主キーで結合するような表の場合

    データウェアハウスでのディメンジョン表やマスタ表などが該当します。

ローストア表

  • 解析対象のデータを格納する表の場合

    データウェアハウスでのファクト表や,ログデータまたはセンサデータを格納する表などが該当します。

    特に,解析対象のデータ(レンジインデクスによる絞り込みなどで検索対象となるデータ)が,数ギガバイト以上の場合は,カラムストア表として表を定義することを推奨します。

    解析対象のデータのサイズは,データインポートの際の入力データファイルを基に見積もってください。

    なお,解析対象のデータが数百メガバイト以下の場合は,解析対象のデータを格納する表であっても,ローストア表として表を定義することを推奨します。

カラムストア表

表に定義する列のデータ型

  • 表に配列型の列を定義する場合

    カラムストア表として定義してください。

カラムストア表

注※

更新行のカラム化機能を有効にすると,カラムストア表の検索性能の低下を防ぐことができます。更新行のカラム化機能については,「11.18 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。

重要

カラムストア表に適した表は,マルチチャンク表に適するケースが多いため,カラムストア表かつマルチチャンク表として表を定義することを推奨します。表をマルチチャンク表として定義する際の考慮点については,「5.2.4 マルチチャンク表を定義する場合の考慮点」を参照してください。

表をローストア表として定義する場合は,CREATE TABLE文のSTORAGE FORMATオプションにROWを指定するか,またはSTORAGE FORMATオプションの指定を省略してください。表をカラムストア表として定義する場合は,CREATE TABLE文のSTORAGE FORMATオプションにCOLUMNを指定してください。

CREATE TABLE文については,マニュアルHADB SQLリファレンス定義系SQLを参照してください。

(3) カラムストア表の検索時に使用されるB-treeインデクス

カラムストア表に定義したB-treeインデクスが,カラムストア表の検索時に使用されるケースは限定されています。カラムストア表で,B-treeインデクスを使用する代表的な例を次に示します。次のような絞り込みが有効な場合にだけ,カラムストア表にB-treeインデクスを定義することを推奨します。

特定の年や月のデータにアクセスするような場合は,レンジインデクスを定義して検索範囲を絞り込むことを推奨します。

カラムストア表の検索時に使用されるB-treeインデクスの規則については,マニュアルHADB AP開発ガイドSQL文の実行時に使用されるB-treeインデクスおよびテキストインデクスを参照してください。

メモ

B-treeインデクスを定義したカラムストア表には,更新行のカラム化機能は適用されません。更新行のカラム化機能については,「11.18 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。

(4) カラムストア表の列データの圧縮方式

カラムストア表にデータをインポートする際,各列のデータは,次の表に示すどれかの方式で圧縮されます。そのため,ローストア表に比べてデータ容量が小さくなります。データインポートの実行時に,インポートするデータを基に,HADBサーバが次の表に示す圧縮方式のどれかを自動的に選択します。

表5‒2 カラムストア表の列データの圧縮方式の種類

項番

圧縮方式

説明

1

無圧縮(NONE

データは圧縮されないで格納されます。

2

ランレングス圧縮(RUNLENGTH

同じ値のデータが連続で出現した場合に,連続で出現したデータと繰り返し回数の組でデータを保存します。同じ値のデータが繰り返し連続して出現するような場合に有効な圧縮方式です。

圧縮の例:AAAABB4A2B

3

差分圧縮(DELTA

先頭のデータの値と隣り合うデータの差分値とで,データを保存します。ある特定の値の周辺にデータが集中している場合に有効な圧縮方式です。

圧縮の例:100,99,101,103100,-1,2,2

4

差分ランレングス圧縮(DELTA_RUNLENGTH

対象のデータを差分圧縮したあとに,差分値のデータをランレングス圧縮します。一定の値でインクリメントするデータ(等差数列をなすデータ)の場合に有効な圧縮方式です。伝票番号などのように,番号が1つずつ加算されていくようなデータを圧縮する際に有効です。

5

辞書圧縮(DICTIONARY

よく出現するデータを辞書に格納しておき,データ部には辞書へのインデクス(添え字)だけを格納します。カーディナリティ(データの種類)が少ない文字列データなどで有効な圧縮方式です。

なお,辞書のサイズは最大16キロバイトです。

圧縮の方法には,上記の表に示すようにデータの重複を排除する方式と,データ間の差分を取る方式があります。そのため,128バイト以上の文字列データや,128バイト以上のバイナリデータなどのように,データの重複があまりない場合や,データ間の差分が少ない場合は,圧縮効果が少ないことがあります。

メモ
  • データインポートの終了時に,HADBサーバが選択した圧縮方式がメッセージに出力されます。

  • データインポート時に圧縮方式が決定されます。そのため,同じ表へのデータインポートの場合に,インポートするデータのパターンが異なると,同じ列であっても圧縮方式が異なることがあります。

  • HADBサーバによる圧縮方式の選択は,データインポート時にデータを格納するスレッドごとに行われます。

  • HADBサーバは,格納する列データの先頭16メガバイト分の列データに対して圧縮率を計算し,最も圧縮率がよい圧縮方式を選択します。圧縮率が悪く,圧縮後のデータサイズが,無圧縮のデータサイズ以上になった場合は,無圧縮が選択されます。

なお,次に示す処理の場合に,カラムストア表の列ごとに圧縮方式を指定することもできます。この場合,常に指定した圧縮方式で列データが圧縮されます。

■UPDATE文またはDELETE文を実行するカラムストア表と圧縮方式の関係

更新を前提としたカラムストア表の場合,差分圧縮以外の圧縮方式を指定することを推奨※1します。HADBによる圧縮方式の自動選択※2をしないようにしてください。

[理由]

カラムストア形式のデータに対して,UPDATE文またはDELETE文を実行した場合,HADBは対象の行データを全列分伸長します。差分圧縮(DELTA)の伸長の際,先頭のデータから伸長対象のデータまでのすべての差分値を計算するため,ほかの圧縮方式よりも列の伸長処理に時間が掛かります。そのため,カラムストア表に差分圧縮(DELTA)が適用された列があると,UPDATE文またはDELETE文の実行時間が長くなります。

注※1

CREATE TABLE文の圧縮方式指定(COMPRESSION TYPE)で,差分圧縮(DELTA)および圧縮方式の自動選択(AUTO)以外を指定することを推奨します。

注※2

圧縮方式指定を省略した場合,または圧縮方式指定にAUTOを指定した場合,HADBが圧縮方式を自動選択します。その結果,圧縮方式に差分圧縮(DELTA)が適用される可能性があります。

(5) ローストア表とカラムストア表の使い分けの例

ローストア表とカラムストア表の使い分けの例を,次に示す運用例を基に説明します。

運用例

A社では,各営業所からの売上データを集めた売上データ分析用のデータウェアハウスを構築しようとしている。売上データの分析軸として,日付,営業所,商品,顧客を考えている。このデータウェアハウスを構築するために,スキーマモデルとして,次の図に示すスタースキーマで構築することに決定した。

図5‒2 A社の売上データ分析用のデータウェアハウスのスキーマモデル

[図データ]

上記のスタースキーマの場合,SALES表がファクト表になります。また,PRODUCTS表,CUSTOMERS表,OFFICES表,およびCALENDAR表が,ディメンジョン表になります。各表には,次のデータが格納されています。

上記のようなスキーマモデルで,月次の売上データの集計,顧客ごとの売上分析,および営業ごとの売上分析などを行った場合,次のような検索が頻繁に実行されると予想されます。

そのため,SALES表は,カラムストア表として定義します。また,売上発生日に対応する列にレンジインデクスを定義します。

PRODUCTS表,CUSTOMERS表,OFFICES表,およびCALENDAR表は,SALES表のデータにある外部キーによるジョインで使用されるケースが多くなると予想されます。これらの表は,データ件数が比較的多くないため,ローストア表として定義します。また,主キーに対応する列にB-treeインデクスを定義します。