NoSQLを上回る性能のVoltDB、そのアーキテクチャとは

2010年6月1日

データベース研究者の大御所、マイケル・ストーンブレイカー氏が開発し、NoSQLデータベースをも上回る性能を発揮するリレーショナルデータベース「VoltDB」。前回の記事では、その特徴と、NoSQLデータベースのCassandraとのベンチマーク比較を紹介しました。

VoltDB: Fast, Scalable SQL RDBMS with ACID

今回はVoltDBのアーキテクチャについて調べたことをご紹介しようと思います。基本的にはVoltDBのWebサイトやリンク先の内容を基にしています。また、ブログ「独り言v6」のエントリ「VoltDB登場 – RDBMSのようでRDBMSではない新システム」も参考にさせていただきました。

シェアドナッシングな分散インメモリデータベース

VoltDBのアーキテクチャは、FAQのページで以下のように説明されています(英語を訳したものを引用しています。以下同じです)。

VoltDBは、シェアドナッシングなサーバ群から構成されるスケーラブルなクラスタ上の分散されたインメモリデータベースである。トランザクションはANSI標準のSQLを用いたJavaストアドプロシージャで定義され、過去のデータベースにあるようなロック、ラッチ、リソース管理のようなオーバーヘッドを排除しつつトランザクションの一貫性を備えるために並列的なシングルスレッド処理によるデータアクセスを行う。

冗長性を含めた特徴を箇条書きにすると、以下のようになります。

  • データはメモリ内に保持される。これによってスループットを最大化し、(HDDを使わないため)バッファ制御を不要にする
  • データとそれを処理するSQLエンジンを、クラスタのCPUコアごとに分散配置する
  • それぞれのシングルスレッド化したパーティションの操作は独立しているため、ロックやラッチを排除できる
  • データは可用性のためにクラスタ内で自動的にレプリケートされる。これによりログが不要になる
  • クラスタにサーバを追加していくごとに、性能はリニアに近い形で向上していく

すべてのSQLはストアドプロシージャとして

アプリケーションの開発者にとってVoltDBがこれまでのデータベースともっとも異なるのは、SQL文がJavaのクラスとなることでしょう。基本的にアドホックなクエリはできず、あらかじめすべてのSQL文をJavaクラスとして定義しておき、データベースの中にストアドプロシージャとしてデプロイしておく必要があるようです。

VoltDBの「Prodcut Overview」のページには以下のような説明があります。

クライアントとサーバ間のやりとりを最小化するため、データアクセスはストアドプロシージャとして提供される。ストアドプロシージャはJavaで書かれ、それぞれのプロシージャは1つのJava Calssとなる。ストアドプロシージャ内では、OLTPにフォーカスしたSQLのサブセット、ジョイン、グループバイ、ソート、集計、一般的な計算、リミットなどが利用可能だ。

そしてストアドプロシージャとデータは、コンパイラによって分散配置されます。

アプリケーションが利用するスキーマとストアドプロシージャの作成には、VoltDB Application Compilerを用いる。コンパイラは性能と可用性を最適化するためにデータのパーティションとレプリカを自動的に作成する。

このアーカイブは1つもしくはそれ以上のVoltDBのクラスタにデプロイ可能だ。

つまり、あらかじめデータと、そのデータを操作するためのストアドプロシージャをクラスタ内のサーバに最適化して分散配置することによって、アドホックなクエリに対する柔軟性を犠牲にする代わりに高度なシェアドナッシングアーキテクチャによる分散処理で高性能を実現する、ということのようです。

データのパーティションは、できるだけそれぞれのシングルパーティション内でトランザクションが完了するようにする一方で、複数のパーティションにまたがるトランザクションを最小化するように行われます。ただし、アプリケーションやハードウェア構成ごとに性能の出方が変わるため、ベンチマークを繰り返して最適なパーティション数を決定すべきだとしています。

しかも、スループットを最大化するために、非同期コールによってクラスタ内の全ノードとクライアントをコネクションすることが推奨されています。

クラスタ間レプリケーションで冗長性

インメモリデータベースでは、サーバが落ちたときにデータをすべて失う可能性があるため耐久性や可用性が気になります。VoltDBでは、クラスタ内サーバ間のレプリケーションと、クラスタ間のレプリケーションをサポートしているようです。引き続き「Product Overview」から。

VoltDBはクラスタ内あるいはクラスタ間レプリケーションによる耐久性を実現している。データはノード故障に対する耐久性を備えるため、クラスタ内の複数のサイトで同時に処理されコミットされる。また(データセンター倒壊のような破滅的な)クラスタ全体の故障に対する耐久性を実現するため、クラスタのあいだでのトランザクションは非同期にコミットされる。

VoltDBはホットスタンバイのスレーブサーバは必要なく、障害を起こしたサーバが復帰する場合もマニュアルでの操作は不要で、稼働中のレプリカ相手のノードもしくはクラスタが自動的にリストアを行う。

また、メモリ内のデータベースはバックアップのためにディスクへ保存、もしくはデータウェアハウスへのロードなどが可能だ。

NoSQLに対抗できる強力なソリューション

こうしてみると、データとあらかじめ決められたSQL文をセットで分散配置することで、並列処理とスケーラビリティを実現することがVoltDBの中心的なコンセプトのようです。それにインメモリデータベースを組み合わせることで、非常に高い性能を実現しているといえます。

これはOracleやSQL Server、DB2といった既存のリレーショナルデータベースで構築された、アドホックなクエリを柔軟に処理するタイプの業務アプリケーションの置き換えにはあまり向いていないかもしれません。しかしNoSQLがいま狙おうとしている、パターン化された検索中心のWebサービスのバックエンドとしては、NoSQLよりも複雑なデータ構造と従来のプログラマが使い慣れたSQLを備えており、しかも性能面でも圧倒していることを考えると、魅力的なソリューションの1つになるのではないかと思えます。

ただしインメモリデータベースですからデータ容量がメモリ容量で決まってしまうので、データ容量は予測可能な範囲でないといけないため、使い所は難しそうですね……。

将来のロードマップ

最後に「VoltDB Roadmap」からロードマップをそのまま引用します。

Version 1.1

  • Change database schema on the fly
  • Cluster monitoring tool
  • JSON client interface
  • Ongoing performance improvements for multi-partition transactions
  • SQL support as needed

Version Next

  • High Availability: replace failed node on the fly
  • Export Enhancements

Future

  • WAN replication
  • Add/remove cluster nodes on the fly
  • Repartition nodes on the fly
  • ETL integration tools

関連記事

Publickeyではさまざまなデータベースのアーキテクチャについて紹介してきました。

NoSQLについても、登場の背景や主要な製品について紹介しています。

ちなみに、NoSQLという名前の由来を紹介した(おそらく日本でもっとも詳しい)記事はこちら。

あわせて読みたい

NoSQL RDB データベース




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本