列指向データベース管理システム
大規模データを対象としたNoSQL型DBMSの中には「カラム指向型」と呼ばれるものがある。しかしここでいうカラム指向(列指向)とは、DBMSの利用者から見えるデータモデルを表しており、DBMS内部のデータ格納方式を表しているわけではない。これらは、本項で扱う列指向DBMSとは利点が全く異なるので注意が必要だ。
NoSQLのカラム指向データモデルは、非定型の大規模データを格納することを主な目的としており、行ごとに任意の名前のカラム(列)を無数に(時には1行に数百万カラム)格納できる。それぞれのカラムは、行ごとにカラム名の辞書順によってソートされ、1回のクエリで、指定した1行に属する全てのカラムを取り出したり、指定した1行に属する指定した範囲のカラムだけを取り出したりできる。少数の行に対する多くの列の取得に適しており、大量の行に対する少数の列の集約処理には適さない。このようなDBMSには、Apache HBase、Apache Cassandraなどがある。
一方、NoSQLではないが、大規模データを対象にSQL形式の分散クエリを実現するソフトウェアでは、列指向DBMSと同様のデータ格納方式を採用し、同じ利点を持つ。 このようなソフトウェアは分散SQLクエリエンジンと呼ばれ、Google Dremel/BigQuery、Amazon Redshift、 Apache Hadoop上で動作するCloudera Impalaなどがある。
行指向データベースと列指向データベースを比較する際には、与えられた処理を行うためのハードディスクへのアクセスの効率性に着目する必要がある。処理時間の中でディスクのシーク時間は大きな割合を占める上、CPUの計算力の向上に対して、シーク時間は緩やかなペースでしか改善されない。以下に、データを行指向または列指向で配置する場合のトレードオフを挙げる。
列指向データベースは、大量の行に対する少数の列の集約処理が効率的である。列数が少ないほど、読み込むデータ量を減らすことができる。
列指向データベースは、全行に対する少数の列の一括更新が効率的である。新規に列データを作成し、以前のデータと置換することで、他の列へのアクセスを回避できる。
行指向データベースは、少数の行に対する多くの列の取得が効率的である。行あたりのサイズが小さい場合には、行全体を1度のディスクシークで読み取ることができる。
行指向データベースは、少数の行に対する多くの列の更新が効率的である。1行全体の書き出しを、1度のディスクシークで行うことができる。
実際の用途を考えると、行指向アーキテクチャはインタラクティブなトランザクションの多いOLTP的な用途に向いているのに対し、列指向アーキテクチャは少数の複雑なクエリを実行するデータウェアハウスのようなOLAP的な用途に向いている。