TOP>企業情報>コラム>技術情報>検証結果に見る、Verticaの特徴と独自性

検証結果に見る、Verticaの特徴と独自性

Vertica

HP Verticaは、大量データを高速に分析できる列指向データベースです。昨今、列指向データベースは数多くの製品がリリースされています。また、従来の行指向データベースにも列指向の機能が追加されはじめ、今や列指向データベースは、当たり前に使われる時代となりました。ただ、ユーザからするとどの製品(サービス)を選択するべきか悩ましい状況となっています。本稿では、HP Verticaの検証結果を交えながら、一般的な列指向データベースとの違いや独自性をご紹介します。

すっかり当たり前になった、列指向データベース


皆さんはHP Vertica(以下、Vertica)というデータベースをご存知でしょうか?Verticaは大量のデータを分析するような情報系システムで利用されているデータベースで、いわゆる「列指向(カラムナー)」に分類されます。最も有名なのが2012年のアメリカ大統領選挙での事例 で、民主党のバラク・オバマ氏を支援するWebサイト「Obama for America」のデータ分析にVerticaが使われました。また、HP社自身もVerticaを利用しており、「hp.com」において15ヵ月分のクリックストリームデータや5年分の購買データを分析しています。また、ビッグデータ分析だけではなく、いわゆる企業内のDWHとしての活用実績も数多くあります。「今、何が起きているのか」「今後、何が起きそうか」といった戦略的で、スピーディな意思決定を支えているのが、Verticaというデータベースなのです。

ただ、列指向という仕組み自体は、もはや珍しいものではありません。数年前であれば確かに「行指向より○○倍速い」といったキーワードがもてはやされましたが、現在では市場の成熟とともに行指向データベースが列指向の機能を取り入れたり、クラウド上で列指向データベースをPaaSとして提供するプレイヤーが増えてきました。かつて主流だったDWH専用アプライアンス型を導入した企業でも、時代の変化とともに改めて製品を選定しなおすという動きが増えているように感じます。

こうした選択肢の増加はユーザにとって喜ばしいことですが、逆に製品やサービスが増えすぎて個々の良し悪しや特徴がわかりにくくなっています。例えば、列指向データベースの製品紹介やプレゼンテーション資料を見ると、大抵の場合は以下のような特徴が書かれています。

図1:よくある列指向データベースの特徴

図1:よくある列指向データベースの特徴

このように、ほとんど似たような特徴が書かれているので、カタログスペック上での比較は非常に困難です。また、ベンチマーク結果の公開を禁じている製品がほとんどで、さらに価格が非公開な場合もあります。ただでさえ情報系システムは正当な投資コストを算出して予算化するのが難しいと言われているのに、限られた情報で検討を進めていくとなると、採用までの道のりは困難を極めます。とは言え、全ての製品を評価・検証する時間はもちろんないので、その製品だけが明らかに優れている“尖った”部分をまずは探していかなければなりません。

そこで本稿では、一般的な列指向データベースとVerticaが明らかに違う点を中心に解説します。

※列指向データベースの一般的な特徴については、こちらのサイト をご参照ください。

Vertica最大の特徴はプロジェクション


Verticaでは、テーブルは論理スキーマとして存在し、実データは「プロジェクション」というオブジェクトに格納されます。これは、一般的な列指向データベースと明らかに違う点です。データはプロジェクション内で、クエリに必要な列だけが圧縮・ソートされた状態になっています。プロジェクション(射影)というと、データベースの世界では「表から条件に合う列を取り出す操作」のことを指しますが、Verticaの場合はこの射影が最初から行われた状態になっていると考えればわかりやすいのではないでしょうか。Verticaはコンピュータ界のノーベル賞とも言われるチューリング賞を今年(2015年)受賞したマイケル・ストーンブレーカー博士が開発に携わった「C-Store」を起源とするデータベースで、読み取りを効率化/高速化するための設計思想が他のデータベースとは大きく異なっています。

まずは、プロジェクションについて詳しく説明します。Veticaでは、表を作成するとスーパープロジェクションというオブジェクトが自動的に作成されます。スーパープロジェクションは全ての列を含んでおり、データは列ごとに圧縮・ソートされた状態になっています。この段階でかなり効率的な状態でデータが格納されているため、このままでもSQLはかなり高速に処理されます。(Database Designerというツールで圧縮率とソート順を最適化するとより高速になります)。

しかし、Verticaが面白いのは、この状態から特定のクエリだけを速くするために追加のプロジェクションを作成できるところです。「特定の列だけを含むもの」「すでに結合してあるもの」「すでに集計処理されているもの」というように、あらかじめクエリを意識したプロジェクションを作成しておくことで、性能を限界まで高めることができるのです。

図2:プロジェクションの種類

図2:プロジェクションの種類

※各プロジェクションの詳細はVertica技術情報サイト をご参照ください。

では、プロジェクションの効果を検証してみましょう。図3は、同じハードウェア上にStar Schema Benchmark(DWH系処理のベンチマーク)のデータを1TB分用意し、全ての列を含むスーパープロジェクションと、クエリに必要な列だけを含むクエリスペシフィックのプロジェクションで性能を比較した結果です。先ほど説明したように、スーパープロジェクションのみでも従来の行指向データベースと比較してかなり高速な結果になりました。しかし、Verticaならではのクエリスペシフィックを使用すると、さらに大幅な高速化ができることがわかります。

図3:プロジェクションの効果

図3:プロジェクションの効果

これがVerticaの“尖った”部分の一つであるプロジェクションの効果です。一般的なデータベースでは索引を作成したり、あるいは列のソート順を変えることでチューニングを行いますが、Verticaの場合はプロジェクションを作成するだけです。作成も簡単で、Database DesignerにSQL文(テキスト)を渡せば、自動的に最適なプロジェクションがデザインされます。もちろん、無闇にプロジェクションを作りすぎないよう気をつけなければなりませんが、クエリの応答時間をこれだけ短くできる選択肢は他のデータベースではなかなか見られません。「とにかくこの処理だけは速くしたい」という場合には、プロジェクションが非常に有効です。

列指向あるある、Verticaではどうなる? ~圧縮率~


前節では性能についてVerticaならではの要素を説明しましたが、列指向データベースでよく特徴として挙げられる「高い圧縮率」や「MPP(Massive Parallel Processing:超並列プロセッシング)アーキテクチャ」についても見ていきましょう。まず圧縮についてですが、列指向データベースは列単位でデータを格納しているため、行指向データベースと比べて同一ファイル(ブロック)内に重複値が含まれやすいという特徴があります。これをもって「高い圧縮率」と言い切ってしまうこともできますが、気になるのは列指向データベース同士を比較した場合に圧縮率はどう違うのか?ということです。

列指向データベースにおいて圧縮率を左右するのは、データのソート順です。性別などデータの種類が少ない列からソートすれば圧縮率が高くなり、反対に注文番号などデータの種類が多い列からソートすると圧縮率が低くなります。ただし、ソート順は性能にも大きく影響するため、「頻繁に検索条件で指定される列」「頻繁に結合される列」などを優先してソートすることがほとんどです。その結果、列指向であっても圧縮率が思った程高くならないという場合が多々あります。実際に圧縮率を確認してみると、行指向データベースと列指向データベースではそれほど極端な差はありません。

図4:データの圧縮率

図4:データの圧縮率

Verticaの場合はどうでしょうか。Verticaにはプロジェクションがあり、格納される列やソート順はプロジェクションによってそれぞれ異なります。そのため、サイズが大きく全ての列を含むスーパープロジェクションは圧縮率を重視したソート順、特定の列だけを含むクエリスペシフィックは性能を重視したソート順というように、同じデータベース内で使い分けることができます。先ほどの検証データを使って、Verticaでデータの種類が少ない順にソートしてみると、以下のように圧縮率が劇的に変わります。なお、最適な圧縮はDatabase Designerが自動的に選択してくれるので、特に難しい作業は必要ありません。

図5:Verticaで検証した圧縮率

図5:Verticaで検証した圧縮率

当然、プロジェクションを追加した分だけデータベース全体の容量は増えていきますが、追加したプロジェクションには特定の列しか含まれていません。スーパープロジェクションがこれだけ圧縮できているので、追加したプロジェクションを加えても合計サイズはそれほど大きくなりません。これならば、「高い圧縮率」と言って良いのではないでしょうか。

列指向あるある、Verticaではどうなる? ~MPPアーキテクチャ~


列指向データベースのほとんどが、MPPアーキテクチャであるという特徴を掲げています。これは拡張性に優れていることを示すもので、要するに「ノードを追加してスケールアウトできる」ということを意味しています。構築段階で処理量が予測できなかったり、将来的に利用者の増加を見込んでいるようなシステムには欠かせない要素ですが、単にスケールアウトできるというだけならどのデータベースも同じです。実際にスケールアウトするとなった場合、以下のような落とし穴がないか注意しなければなりません。

MPPアーキテクチャのよくある落とし穴

  • 高価な専用ハードウェアを追加購入しなければならない
  • ノード数に比例してソフトウェアライセンスが増えてしまう
  • スケールアウト/スケールイン時に毎回システム停止が発生する
  • データベース側にロードバランスの機能がない
  • マスターノード(リーダーノード)がボトルネックになり性能が出ない


Verticaはどうかというと、上記のいずれにも該当しません。Verticaはソフトウェアとして提供されており、一般的なIAサーバでも問題なく動作します。また、課金体系がデータ容量をベースとしているため、ノード数を増やしても(パフォーマンス向上のためのコア数が増えても)ソフトウェアライセンスは変わりません。オンプレミスの場合はファシリティやハードウェアの調達コストが掛かってしまいますが、Verticaはクラウド上での動作もサポートされているため、最小限のコストでスケールアウトできます。冒頭に紹介したアメリカ大統領選挙の事例においても、Verticaをクラウド上で利用しています。

実際にVerticaをクラウド上に構築してスケールアウトの効果を確認した結果が、以下のグラフです。1ノードの結果と比べて、クエリの応答時間が大幅に短縮できていることが分かります。Verticaはロードバランスの機能を標準搭載しており、更にマスターノードが存在しないため、リニアな性能向上が期待できます。

※マスターノードが存在しない強みについて、詳細はこちらのページ をご参照ください。


Verticaについて、いかがだったでしょうか?列指向データベースはどれも同じような機能を備えていますが、実際に検証してみるとカタログスペックからは見えない違いが数多く存在することがわかります。今回ご紹介したプロジェクションのように、個々の製品が持つ最大の特徴を抑えておくことが、製品選定・評価においては非常に大切です。Verticaには、Community Edition という製品評価版がありますので、プロジェクションによる性能向上や高い圧縮率などを是非実際に確認してみてください。こちらから「はじめてのVertica(手順書) 」もダウンロードできますので、数十分もあればVerticaの世界を体験できます。


執筆者紹介

河西大樹

河西 大樹(Daiki Kawanishi)

株式会社アシスト データベース技術本部 技術開発部

アシスト入社後、「Oracle Database」の構築や教育、サポート業務を担当。2015年より「Vertica」担当となり、製品検証や執筆を担当。
趣味は野球観戦。毎日の野球ニュースチェックも欠かさない。


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る