噂の超高速分析データベースを試してみよう~ログ解析,機械学習なんでもござれ~

第2回 あのシステムもビッグデータ分析や機械学習に活用中! 超高速データベース「Vertica」とは?[前編②]

この記事を読むのに必要な時間:およそ 3 分

Verticaの強み③─⁠─プロジェクション

Verticaにはプロジェクションという独自技術があります図5⁠。Verticaでは,通常のRDBMSと同様に,テーブルを作成してそのテーブル名や列名を指定してSQLで処理します。しかし,テーブル内のデータは,必ず1つ以上のプロジェクションに格納されます(SQLを作成する際,プロジェクションを意識する必要はありません⁠⁠。

図5 プロジェクションの概念

図5 プロジェクションの概念

プロジェクションの最適化

では,プロジェクションにはどのような価値があるのでしょうか。

Verticaでは,初期データをロードしたあとのお約束として「テーブル(実体はプロジェクション)の最適化」を行います。この作業は,Database Designer(DBD)というユーティリティやManagement ConsoleというGUIツールなどVerticaの標準ツールから実行できます。テーブル最適化を実行すると,Verticaがそのテーブルの特性(列ごとのカーディナリティなど)を調査したうえで,より効率的なテーブル構成に再構成します図6,7⁠。おもに次のような点が再構成のポイントになります。

  • テーブル内の列順序を変更
  • 先頭の列から順にデータをソート
  • 複数のノードでデータを均等に分散するためにどの列を基準にするべきかの分析と実行

図6 最適化を実施する前のプロジェクション

図6 最適化を実施する前のプロジェクション

図7 最適化を実施したあとのプロジェクション

図7 最適化を実施したあとのプロジェクション

このようにテーブルを最適化することで,データの並び順が整理され,データがソートされることによって非常に高いデータ圧縮が行われます。また,ソートされたことによってSQLのWHERE句で指定されたデータを効率良く探し出せるようになり,パフォーマンスが劇的に向上します。

なお,アプリケーションから頻繁に処理されるSQLをテーブル最適化の際にVerticaに読み込ませると, SQLの特性(WHERE句でよく使用される列など)も踏まえて最適化が行われます。アプリケーションの特性 まで考慮したテーブル構造にしてくれるのです。

テーブルやアプリケーションの特性をユーザー(管理者)が考え,ソートするべき列やデータ分散のための列を明示的に指定しなければいけないデータベースもありますが,VerticaではそれをVerticaに委ねることができるため,設計コストの負担がありません(ユーザー自身によって明示的に列順序などを指定することも可能です⁠⁠。

なお,テーブル最適化作業は,ワークロードに大きな変更がない限りは,初期データロード後に一度だけ実行すれば問題ありません。また,テーブルを最適化したあとにロードしたデータも,自動的に並び替えが行われます。

特定のクエリに特化したプロジェクション

テーブル最適化によって,テーブルが汎用的に高速処理しやすい構成になります(⁠⁠最適化されたプロジェクション」と言います⁠⁠。しかし図7の例の場合,⁠エリア」列,⁠店舗」列をWHERE句に指定したSQLと比較して,⁠日付」列のみを指定した処理は,あまりデータソートがされていないので大きな効果は得られません(処理が相対的に遅くなる可能性があります⁠⁠。

このように,最適化プロジェクションはそのテーブルが「汎用的に」効率化されている状態であるため,個別のSQLで見ると構成を変更すればより高速化できる可能性があります。

このような個別SQLを高速化するための手段として,Verticaには「クエリスペシフィックプロジェクション」が用意されています図8⁠。簡単に言えば,個別SQLのために,そのSQLに最適化した別のプロジェクションを作るというしくみです。クエリスペシフィックプロジェクションは,最適化プロジェクションとは別にいくつでも作成できます。SQLが発行されると,Verticaは各テーブルに作成されているプロジェクションで最も効率的なプロジェクションを自動的に使用します。SQLで指定するのはあくまでもテーブル名で,アプリケーション側に手を加える必要はありません。

図8 クエリスペシフィックプロジェクション

図8 クエリスペシフィックプロジェクション

多くのユーザーからは,最適化プロジェクションだけで期待する性能を出すことができた,という声をいただいています。しかし,その中でどうしてもさらに性能改善したいSQLがいくつかある場合,Verticaではクエリスペシフィックプロジェクションを作成して対処する方法が用意されています。スケールアウトによる全体の処理性能向上も1つの方法ですが,個別SQLへの対応が用意されていることは,Verticaの大きな魅力です。

なお,クエリスペシフィックプロジェクションの作成もとても簡単です。高速化したいSQLをツール(DBD)に渡して実行すれば,Verticaが自動的に作成してくれます。作成例やその効果をYouTubeにアップしていますので,ぜひご覧ください。

ちなみに,クエリスペシフィックプロジェクションのほかに,クエリの集計処理を実施した状態でプロジェクションを作成しておく「ライブアグリゲートプロジェクション」も提供されています。上手に使いこなせば大幅な性能向上が実現できます。

テーブル最適化による効果

ほかのデータベースからVerticaに移行した事例では,それまで30分を要していた4億件のデータ集計処 理がVerticaでは2秒に短縮でき,実に900倍の性能向上を実現しています。これはクエリスペシフィックプ ロジェクションを使わずにテーブルを最適化しただけで得られた効果です。

さらには,Verticaは自動的にチューニングをするため,メンテナンス作業といった運用コストを削減することにも成功しています。

プロジェクションの注意事項

プロジェクションは内部的に別オブジェクトとして物理的に作成されるため,次の事項については注意が必要です。

  • データロード,更新系処理の性能劣化(プロジェクションの数だけデータの書き込み処理が増えます)
  • データ領域に十分な空きがあるか(プロジェクションの数だけデータ領域を消費します)

分析性能とトレードオフになるこれらのポイントを理解したうえで,活用を検討してください。

さっそく試してみよう!

今回は,情報分析系データベースとしてのVerticaの強みを中心に説明してきました。すでに同ジャンルの製品をお使いの方も,特にプロジェクションについては使ってみたいと思っていただけたのではないでしょうか。

誌面の都合で書ききれないVerticaの良さはまだたくさんあります。また,利用上の注意事項も当然あります。ぜひ後述の「Vertica技術情報サイト」にアクセスし,さらに深い情報を参照してみてください。 また,Verticaには,3ノード構成,1TBまでの範囲であれば機能制限なしで利用できる評価版「Vertica Community Edition」があります。このダウンロード方法から,Verticaのインストール,テストデータのロード,プロジェクションの最適化方法などを網羅した「はじめてのVertica」を,http://vertica-tech.ashisuto.co.jp/WDP_webからダウンロードできます。オンプレミス環境,AWS環境のどちらにも対応しています。ぜひ,お試しください。

次回予告

今回は,Verticaの強みを中心にその基本を解説しました。しかし,これはVerticaが持つ機能の一部にすぎません。次回は非構造化データとの連携,機械学習機能の使い方など,さらにホットなトピックをお届けする予定です。ご期待ください!

Vertica技術情報サイト⁠,はじめてのVerticaのダウンロードはこちらから。

Vertica事例セミナー『Verticaで解決したビジネス課題』
URL:https://mp.ashisuto.jp/public/seminar/view/7464

概要:実際に「Vertica」を導入したユーザー3社様にご講演いただきます。生の声をお聴き逃しなく!

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.117

2020年6月24日発売
B5判/152ページ
定価(本体1,480円+税)
ISBN978-4-297-11466-4

  • 特集1
    小さく始めて,大きく改善
    実戦投入TypeScript
    あらゆるJavaScriptプロジェクトに有効!
  • 特集2
    品質もスピードも落とさない!
    AWS/GCPコスト削減
  • 特集3
    WSL 2,Docker,Visual Studio Code
    [最新]
    Windows開発環境

著者プロフィール

倉岡洋義(くらおかひろよし)

株式会社アシスト データベース技術本部 技術統括部 技術1部4課

学生時代に研究室のSunワークステーションの管理者になったのをきっかけにSIerに就職。

Linux系インフラエンジニアの道を歩みながら,Oracle RACのクラスタリング技術に衝撃を受けてアシストに転職。

Oracle,InfiniDBを経て現在はVerticaデータベースを担当。

趣味はピアノと筋トレ。