列指向
データベース管理システム(カラムナデータベース)は、データベース内部でのデータの格納方法に着目したシステムです。従来の行指向データベースとは異なり、列ごとのデータをまとめて取り扱うことで、特定の処理において高い効率性を実現します。特に、
データウェアハウスや図書館のカタログなど、大量のデータを集計するような用途に適しています。
行指向データベースとの違い
一般的な
データベース管理システム(DBMS)は、行を構成する列データをまとめて格納します。一方、列指向データベースでは、列の値をまとめてファイルシステム上の近い場所に配置します。この違いにより、データの読み書きの効率に差が生じます。
メリットとデメリット
列指向データベースと行指向データベースのどちらが優れているかは、用途によって異なります。重要なのは、処理に必要なディスクアクセスをいかに効率化するかという点です。
列指向データベースのメリット
集計処理の効率化: 大量の行に対する少数の列の集計処理に優れています。読み込むデータ量を最小限に抑えることができるためです。
一括更新の効率化: 全行に対する少数の列の一括更新も効率的に行えます。新規に列データを作成して以前のデータと置き換えることで、他の列へのアクセスを回避できます。
行指向データベースのメリット
データ取得の効率化: 少数の行に対する多くの列の取得に優れています。1度のディスクシークで必要なデータを読み込めるためです。
データ更新の効率化: 少数の行に対する多くの列の更新も効率的です。1行全体の書き出しを1度のディスクシークで行えるためです。
適用分野
実際の利用シーンを考慮すると、行指向データベースはトランザクション処理が多いOLTPシステムに、列指向データベースは複雑なクエリを実行する
データウェアハウスのような
OLAPシステムに適しているといえます。
ストレージの効率とランダムアクセス
列指向データベースでは、同一のデータ型を持つ列データをまとめて格納するため、ストレージ効率を最適化しやすいという利点があります。類似した値が連続して配置されるため、データ圧縮技術を効果的に適用できます。特に、同一の値が連続する場合や、値が割り当てられていないフィールドが多い場合に、高い圧縮率を実現できます。
一方、ランダムアクセス性能は、行指向データベースに劣ります。列指向データベースでは、圧縮されたデータにアクセスする際に展開処理が必要になるため、ランダムなアクセスは困難です。そのため、列指向データベースでは、アクセス頻度を減らすための仕組みが導入されている場合があります。
実装例
以前は、Sybase IQのみが広く利用されていましたが、近年は多くのオープンソースおよび商用実装が登場しています。特に、SAP HANAの登場以降、Oracle DatabaseやMicrosoft SQL Serverなどの主要なDBMSでも、列指向のインメモリデータベースがオプションとして利用できるようになっています。
商用: SAP HANA, SAP IQ, Vertica, Valentina Database, Vectornova/Vectorstar High-speed Data Engine, kdb+, Sensage Scalable Log Server, 1010data Tenbase database, DataProbe, EXASolution, Skytide XOLAP Server, SuperSTAR from Space-Time Research, ParAccel Analytic Database, Dr.Sum EA
商用オープンソース: Infobright (旧Brighthouse), RC21
*
オープンソース: C-Store, FastBit, Infobright Community Edition, LucidDB, MariaDB ColumnStore, MonetDB, Metakit,
S言語, GNU R
NoSQLデータベースの中には、「カラム指向」と呼ばれるものがありますが、これは
データモデルの話であり、内部のデータ格納方式は列指向データベースとは異なります。
NoSQLの「カラム指向」は、非定型の大規模データを格納することを目的としており、1行に多数のカラムを格納できます。これは、少数の行に対する多くの列の取得には向いていますが、大量の行に対する集計処理には適していません。
一方、大規模データを対象としたSQLベースの分散クエリエンジンでは、列指向データベースと同様のデータ格納方式を採用し、同じ利点を享受しています。例として、Google Dremel/BigQuery、Amazon Redshift、Apache Hadoop上で動作するCloudera Impalaなどが挙げられます。
まとめ
列指向データベースは、
データウェアハウスなどの特定の用途で、従来の行指向データベースよりも優れた性能を発揮します。データの格納方法に着目することで、効率的なデータ処理を実現し、大量のデータをより効果的に活用できるようになります。
NoSQLの「カラム指向」との違いにも注意が必要です。