ビジネスインテリジェンスDBMSの夜明け。あるいはカラム型、インメモリ型など新たなデータベースの勃興
カラム型データベース(もしくはカラムナデータベース)については、以前の記事「カラムナデータベース(列指向データベース)とデータベースの圧縮機能について、マイケル・ストーンブレイカー氏が語っていること」で紹介したことがありました。
この記事は2009年10月に書いたのですが、その後カラム型データベースの存在感が急速に高まってきました。それは、ビジネスインテリジェンス(BI)の用途で大規模データ分析をする場合に、従来のリレーショナルデータベースよりもカラム型データベースの方が高い能力を発揮するためです。
米調査会社フォレスターリサーチのブログにエントリされた「It's The Dawning Of The Age Of BI DBMS」(ビジネスインテリジェンスDBMS時代の夜明け)では、従来の行ベースのリレーショナルデータベースは、BIの分析に向いていなかったと指摘しています。
Because fitting BI into a row-oriented RDBMS is often like putting a square peg into a round hole.
行指向のRDBMSをBIに適用するのは、丸い穴に四角いペグを打ち込むようなものだ。
そして、新しいタイプのデータベースがBI市場に登場してきているとし、4つのタイプのデータベースを推奨。
We recommend considering four types of BI-specific DBMS: columnar RDBMS and in-memory, inverted, and associative index DBMS
私たちは4種類のBI特化型DBMSを推奨する。カラム型、インメモリ型、倒置型、アソシエート型のDBMSだ。
4種類それぞれのデータベースは、具体的に次のように挙げられています。
- Columnar RDBMS (like Sybase IQ, HP Vertica, ParAccel, and others)
- In-memory index DBMS (like Microsoft PowerPivot, QlikView, TIBCO Spotfire, and others)
- Inverted index DBMS (like Attivio and Endeca)
- Associative DBMS (like Saffron Technology and Splunk)
カラム型データベースとしてはサイベースのSybase IQがよく知られていますが、国内で販売されている製品としてはオラクルのOracle Exadata(オプションでカラム型の機能も備える)やSAPのHANAなどがありますし、最近ヒューレット・パッカードに買収されたVerticaもカラム型です。BI向けのデータベースとしてカラム型のデータベースは非常に注目されている分野だといえます。
インメモリ型は、前述のSAP HANAも採用していますが、マイクロソフトのPowerPivotがよく知られている例でしょう。オラクルにもTimesTenがあります。
そういえば次期SQL Serverでは、カラムナデータベース機能とインメモリ処理をリレーショナルエンジンに統合するという発表も昨年ありました。
Inverted Index(倒置型インデックス)とAssociative DBMS(アソシエート型DBMS)は、初めて聞く方式です。どんな仕組みなのか、今度調べてみることにしましょう。
カラムナ? カラム型? 列指向?
ところで、以前から「カラムナデータベース」(Columnar Database)と「カラム型データベース」(Column Databvase)と「列指向データベース」(Column-Oriented Database)の3種類の用語は、何かデータモデルの違いや実装に違いがあって使い分けるべき言葉なのかどうか、気になっていました。
そこで機会あるごとに人に聞いたり、調べたりしてきたのですが、それらを総合しつつ、Wikipediaのこの記事「Column-oriented DBMS - Wikipedia」や、IBM DeveloperWorksのこの記事「What is columnar database?」や、それ以外の記事などを読むかぎり、あまり厳密に使い分けられている様子はありません。
というわけで、これまでPublickeyでは「カラムナデータベース」などと記述してきましたが、今後は分かりやすい「カラム型データベース」という用語をできるだけ使っていこうかなと思っています。
このあたりの使い分け、もし詳しい情報をご存じの方がいたら教えてください。