Greenplum Polymorphic Data Storage(ポリモーフィックデータストレージ)
ローストアとカラムストア
エドガー・F・コッド博士が発表した論文から始まったリレーショナルデータベースの過去40年に渡る歴史を振り返ってみても、この1、2年は、新たな局面を迎えたといえるでしょう。主なトピックは、RDBMSベンダーの合併・買収やビッグデータ分析の盛り上がりなどです。
技術面においても「カラムストア」と呼ばれるデータアクセス高速化機能の話題を目にすることが多くなってきています(「カラム型」「列指向」「Columnar(カラムナー)」などとも呼ばれています)。
ローストア・カラムストアとは、その名の通り、データベースへのデータ格納方式を表しています。ローストアというのは、データを行(ロー)単位で格納する方式で、一般的なRDBMS製品はローストアを採用しています。一方、カラムストアというのは、データを列(カラム)単位で格納する方式で、従来よりSybase IQがこの仕組みを採用しています。
Greenplum DBはどちらなのかといいますと、両方をとりいれた「ハイブリッド型」です。ローストアとカラムストアの両方のデータ格納方式を、テーブル単位やパーティション単位で使い分け・組み合わせることが可能です。つまり、(この後で説明しますが)ローストアとカラムストアをハイブリッドで構成し、両方のメリットを”いいとこどり”することができるのです。
ちなみにGreenplum DBと比較されることの多い、他のDHW向けRDB製品では、最近発表されたTeradataの最新バージョンではカラムストアを実装し、ローストアとカラムストアのハイブリッド構成を取れるように追随しつつあるようです。一方、Oracle ExadataのHybrid Columnar Compression機能はカラムストアと見なされることもありますが、これはテーブルをCompression Unit(CU)という単位(圧縮方式によって異なる複数行単位)で分割し、CU内のデータをカラムごとに圧縮する方式であり、カラム圧縮ではありますが、今回取り上げているカラムストアとは異なります。
カラムストアが得意とするワークロード
従来のRDBMSは主にオンライントランザクション処理(OLTP)を意識して設計・開発されてきました。そのため、行単位の参照・更新に適したローストアを採用し、OLTPを効率化しました。
その後、ERPやCRMなどに蓄積された企業活動結果のデータを利用して、経営や企業活動に対する意思決定支援を行うオンライン分析処理(OLAP)が普及しました。OLAPでは集計処理が中心のため、テーブル中の特定列のみが読み込まれるというようなデータアクセスの傾向があります。この性質のある処理をローストアのRDBMSで行うと集計不要な列も読み込まれてしまい、I/Oのオーバーヘッドが大きくなるため、処理効率が非常に悪くなります。
一方、カラムストアでは、集計に必要な列だけを読み込むことでI/Oのオーバーヘッドを大きく削減することができるため、ローストアと比較すると処理が大幅に高速化されます。このように集計処理を非常に高速化できるのがカラムストアのメリットです。
また、それぞれの列で格納されているデータは同一属性のため、一般的に、重複・類似データを多数含みます。したがって、カラムストアでは圧縮効率が高くなるというメリットもあります。これはI/Oのオーバーヘッドのさらなる削減にもつながります。
それではカラムストアのデメリットは何でしょうか?上記で述べたことの反対となりますが、行単位でのデータの参照・更新処理が苦手というところです。したがって、当たり前ではありますが、カラムストア型のRDBMSは、このデメリットから逃れられないということが問題となります。