はじめに
全世界での月間アクティブユーザー数が16億5,000万人を超えたと言われるFacebook。同社では常に生成され続けるデータをビジネスで活用していくうえで、次の課題を抱えていました。
数十PB(ペタバイト)サイズの大量データが分析対象
数分間隔というニア・リアルタイムでのデータ投入
高いクエリ性能での処理が必要
数EB(エクサバイト)レベルのデータが格納されたHadoopと高いレベルの親和性が必要
同社ではこれらの課題をクリアするために、「 Vertica」の導入を決定しました。評価のポイントは、クエリを高速処理できたことはもちろん、データロード性能、きめ細かなワークロード管理機能、そして柔軟な拡張性の高さにあったと言います。
昨今よく話題になる某大手交通配信サービスでは、世界50ヵ国、200都市以上で利用されているモバイルアプリを使い、タクシードライバーと乗客のマッチングを行うサービスを提供するために、10億もの位置情報をリアルタイムに分析する必要がありました。
この課題は、「 Vertica」の地理空間機能を利用することでばく大なデータをリアルタイムに分析し、燃費の最適化や、乗客とドライバーの満足度分析などを実現することで解決しています。
このようにワールドワイドでは、ビジネスシーンのあらゆるところで「Vertica」が活用されています。日本国内でも、全社的な情報分析プラットフォームとしてこれまで利用されてきたDWHアプライアンス、あるいは汎用的なRDBMSからの置き換えとしてVerticaを採用する企業が急増しています。また、アプリケーションのログ分析用にMySQLを利用しているケースが多く見られますが、データ量の増加に伴って検索性能が劣化しがちであることが大きな課題となっているようです。このようなログ分析などもVerticaが得意とする分野です。
本稿では、このように大規模から小規模なシステムまで幅広い用途で使えるVerticaにフォーカスし、前編(①②)と後編(①②)の4回にわたってその魅力に迫っていきます。前編となる今回は、Verticaの基本的なアーキテクチャ、他製品と比較して優れているポイントなどを中心に解説します。後編は、非構造化データを保持するしくみや、機械学習の機能など、通常のデータベースから一歩進んだ機能をご紹介する予定です。
Verticaとは
Vertica は、大量データの超高速分析処理に強みを持つ列指向のデータベースソフトウェアです。データベース界の巨匠Michael Stonebraker氏によって開発されました[1] 。
Verticaは、大きく3つのキーワードでその強みが語られます。
複雑なチューニングを必要とせず、シンプルな運用で高速な分析環境を提供します。データや分析ユーザーの増加にも、サーバを追加することで柔軟にスケールできる分散データベースのアーキテクチャを採用しています。
こうした特徴を支えるおもな技術は、「 列指向」「 MPP」( Massively Parallel Processing )「 シェアードナッシング」です。もしかすると、「 最近よく聞く話だな」という印象を持たれるかもしれません。本稿では、同一ジャンルの製品に共通する技術概念について簡単に振り返りながら、Verticaの特徴について紹介しましょう。
[1] 注1 同氏は2015年3月にコンピュータ分野のノーベル賞とも言われるチューリング賞を受賞しました。IngresやPostgresといった先駆的なデータベースを開発した、データベース研究のパイオニアです。同氏は2015年3月にコンピュータ分野のノーベル賞とも言われるチューリング賞を受賞しました。IngresやPostgresといった先駆的なデータベースを開発した、データベース研究のパイオニアです。
列指向/分散型データベースの基本的な特徴
列指向
従来の汎用的なRDBでは行単位でデータが格納されるのに対して、列指向のデータベースでは列単位でデータが格納されます(図1 ) 。これにより、SQLが必要とする列のデータだけをデータベースから抽出できるため、検索スピードが非常に高速になる点が大きなメリットです。また、このように列でデータを格納することで、非常に高い圧縮率が得られることも列指向のメリットです。
図1 列指向型データベースでのデータ格納のイメージ
一般に、遅いSQL処理では、データベースサーバが担う処理の中でディスクのシークに要する時間が大きな割合を占めます。情報系、分析系のシステムにおいて、この時間を極力削減するために、列指向のアーキテクチャは重要な役割を果たしています。
Verticaは、列データを自動ソートしてデータを格納するため(後述) 、ほかの列指向型データベースよりもさらに圧縮率が高いという特徴を持ちます。筆者が担当した環境では、2TBの投入データが100GBを下回るデータサイズとなるケースもありました。
MPP、シェアードナッシング
MPPとは複数のコンピュータを並列処理させて高性能なシステムを作る手法です。昨今の列指向型データベースでは、複数のサーバ(ノードと言います)で構成したクラスタ上にデータを分散させ、1つのデータベースとして稼働させるMPPアーキテクチャとシェアードナッシングの技術が使用されることが主流です。簡単に言えば、大量のデータ処理を1ノードで処理するよりも複数のノードで手分けして処理したほうが高速処理できるというしくみです(図2 ) 。
図2 一般的なMPP
Verticaは、基本的にノード数が増えるほどリニアに性能が向上します。たとえば、1ノードで100秒かかっていた分析処理が10ノードだと10秒ほどで処理できるようになります。
これらのしくみを採用しているデータベースでは、データ量やユーザーアクセスの急激な増加に対してスケールアウト(ノード追加)によって、低コストで容易に対応できる、という利点もあります。Verticaはオンプレミス環境ではもちろん、AWS(Amazon Web Services )やMicrosoft Azureなどのクラウド上でも使用でき、柔軟に拡張できます。
列指向/分散型データベースでよく聞く課題
こうした列指向/分散型のデータベースの技術により、大量データを高速に処理できることや、データが急増した場合でも処理性能が劣化しないことがおわかりいただけたかと思いますが、一方で次のような課題もよく耳にします。
少人数での利用時は問題なかったが、同時利用ユーザーが増えた途端、大幅に性能が劣化してしまった
スケールアウトによる全体の性能向上ではなく、個別SQLだけを性能向上させたいが、個別チューニングの手段がない
このような課題に対して、Verticaはとても魅力的な機能を提供しています。これらはVerticaの強みとしてユーザーからたいへん高く評価されているポイントになりますので、次回はこの点を中心に具体的に解説していきます。
「Vertica技術情報サイト 」 、「 はじめてのVertica 」のダウンロードはこちらから。
特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT