列指向データベースマネジメントシステム

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

列指向データベースマネジメントシステムは、データベースマネジメントシステム(DBMS)の内部構造において、列のデータをひとまとまりにして取り出すときに効率的であるように設計されたものである。これはデータウェアハウスや図書館のカタログのように、大量の類似のデータ項目に対し集計が行われるもの対して有用である。[1]このアプローチはvalue-basedなストレージ構造を使用する行指向データベースや相関データベースと対比される。

列指向データベースマネジメントシステムは、一般的に「カラムナデータベース」(Columnar Database)とも呼ばれる。

詳細[編集]

通常のDBMSシステムはひとつの行を構成する列データをひとまとまりとして格納する。これに対し列指向DBMSでは、列の値をまとめてファイルシステム上の近い場所に(あるいはひとまとまりの論理構造として)置くというアプローチがある。

利点[編集]

行指向データベースと列指向データベースを比較の際には、与えられた処理を行うためのハードディスクへのアクセスの効率性に着目する必要がある。処理時間の中でディスクのシーク時間は大きな割合を占める上、CPU の計算力の向上に対して、シーク時間は緩やかなペースでしか改善されない。以下に、データを行指向または列指向で配置する場合のトレードオフを挙げる。

  1. 列指向データベースは、大量の行に対する少数の列の集約処理が効率的である。列数が少ないほど、読み込むデータ量を減らすことができる。
  2. 列指向データベースは、全行に対する少数の列の一括更新が効率的である。新規に列データを作成し、以前のデータと置換することで、他の列へのアクセスを回避できる。
  3. 行指向データベースは、少数の行に対する多くの列の取得が効率的である。行あたりのサイズが小さい場合には、行全体を1度のディスクシークで読み取ることができる。
  4. 行指向データベースは、少数の行に対する多くの列の更新が効率的である。1行全体の書き出しを、1度のディスクシークで行うことができる。

実際の用途を考えると、行指向アーキテクチャはインタラクティブなトランザクションの多い OLTP 的な用途に向いているのに対し、列指向アーキテクチャは少数の複雑なクエリを実行するデータウェアハウスのような OLAP 的な用途に向いている。

ストレージの効率とランダムアクセス[編集]

ある列に含まれるデータの型は一致しているので、行指向データベースでは難しいストレージ効率の最適化も、列指向データベースでは採用できる可能性がある。似た値が近い場所に配置されるため、繰り返しを効率よく圧縮できる LZW などのデータ圧縮を適用できる余地がある。このような圧縮を行指向データベースに適用しても、列指向と比べて効率は劣る。特に列方向に同一の値が多数ある場合や、疎行列のように値が割り当てられていないフィールドの比率が高い場合には、圧縮効率は飛躍的に高まる。

一方、ランダムアクセス性能はトレードオフになる。ある1行の列全体を取得する場合には、行指向データベースのように、その行のデータを一箇所に集めて配置したほうが効率的である。列指向データベースで連続する値を圧縮している場合には、読み取りのたびに展開処理が必要になるため、ランダムアクセスは特に難しくなる。そのため、列指向データベースでは圧縮されたデータにアクセスする必要性を減らす機構が追加されている場合もある。[2].

実装[編集]

これまではSybase IQ製品のみが列指向データベースマネジメントシステムとして広く利用されていた。しかし、過去数年に多くのオープンソースおよび商用の実装が出現した。

列指向データベースマネジメントシステムの例として以下のものが挙げられる。

NoSQLのカラム指向データモデルとの差異[編集]

大規模データを対象としたNoSQL型DBMSの中には「カラム指向型」と呼ばれるものがある。しかしここでいうカラム指向(列指向)とは、DBMSの利用者から見えるデータモデルを表しており、DBMS内部のデータ格納方式を表しているわけではない。これらは、本項で扱う列指向DBMSとは利点が全く異なるので注意が必要だ。

NoSQLのカラム指向データモデルは、非定型の大規模データを格納することを主な目的としており、行ごとに任意の名前のカラム(列)を無数に(時には1行に数百万カラム)格納できる。それぞれのカラムは、行ごとにカラム名の辞書順によってソートされ、1回のクエリで、指定した1行に属する全てのカラムを取り出したり、指定した1行に属する指定した範囲のカラムだけを取り出したりできる。少数の行に対する多くの列の取得に適しており、大量の行に対する少数の列の集約処理には適さない。このようなDBMSには、Apache HBaseApache Cassandraなどがある。

一方、NoSQLではないが、大規模データを対象にSQL形式の分散クエリを実現するソフトウェアでは、列指向DBMSと同様のデータ格納方式を採用し、同じ利点を持つ。[3] このようなソフトウェアは分散SQLクエリエンジンと呼ばれ、Google Dremel/BigQuery、Amazon Redshift、 Apache Hadoop上で動作するCloudera Impalaなどがある。

脚注[編集]

  1. ^ C-Store: A column-oriented DBMS, Stonebraker et al., Proceedings of the 31st VLDB Conference, Trondheim, Norway, 2005
  2. ^ Brighthouse: an analytic data warehouse for ad-hoc queries, Slezak et al., Proceedings of the 34th VLDB Conference, Auckland, New Zealand, 2008
  3. ^ Dremel: Interactive Analysis of Web-Scale Datasets, Melnik, et al., Proceedings of the 36th Int'l Conf on Very Large Data Bases, 2010, pp. 330-339