インメモリデータベースがクラウド時代の主流になるという期待
クラウドの伝道師といえるほど熱心にクラウド関係の講演や執筆を行っている早稲田大学 丸山不二夫教授は、クラウドの技術的な発展について次のような見通しを、UNIX magazine 2009 springの37ページに書いています。
筆者は、データのパーシステンシの担い手が、ディスク上のファイルシステムからメモリに移ろうとしていることが、クラウドシステムの技術的な発展方向だと考えている。
僕は今年の1月の丸山氏が登壇したセミナーでこの考えをはじめて聞いたとき、ハッとしました。
クラウドのアーキテクチャでは、クラウドを構成するいずれかのマシンが故障しても大丈夫なように高い冗長性が保証されています。それだけ高い耐障害性を備えているなら、データの永続性を保つためにデータをメモリに置いたままでいいではないか、という斬新かつクラウドのアーキテクチャに沿った考え方に感銘を受けたためです。
実際に長期にわたってメモリ上でデータベースが稼働し続けている事例もあるようです。UNIX magazineの同じページから引用。
1年365日休むことなく稼働を続けるクラウドシステムの高いアベイラビリティは、揮発性のメモリと永続的なファイルシステムという区分を相対化している。すでに、後述するOracle Coherenceを利用したある基幹系のシステムでは1年以上、すべてのデータはメモリ上で処理、、格納され、データベースはロギングと帳票出力の際にのみ用いられるという事例も生まれている。
丸山教授はこれに続いて、永続化手段がディスクからメモリへ変わることによって、データベースもキーバリュー型へ変わっていくという考え方を示しています。
データの担い手がファイルシステムからメモリに変わるにあたって、そこのインデックスづけの手法が変化するのは、ある意味当然である。メモリ上のKey-valueハッシュは、メモリ上のインデックスづけとしては極めて自然なものである。
インメモリでデータベースの能力が拡大する
しかし僕は、Key-value型へとデータベースが変化することよりも、永続化手段がメモリになることでリレーショナルデータベースの能力が相当拡大するのではないか、という点に注目します。
リレーショナルデータベースの最大の欠点は「遅くてスケーラビリティが低い」ことです。その主な原因は、永続化手段としてハードディスクを利用していたことと、データの整合性を維持するためのロックです。
ロックについては、さまざまな手法である程度回避できます。そしてハードディスクの代わりにメモリを使うことで、リレーショナルデータベースは超高速かつ高いスケーラビリティを備えたシステムとして生まれ変われるかもしれません。この超高速かつ高いスケーラビリティのリレーショナルデータベースこそ、ビジネス分野でクラウド時代のデータベースの主役になれるのではないか、と想像します。
インメモリデータベースの現在をOracle TimesTenに見る
こうした仮説を抱きながら、8月4日に行われたオラクルのインメモリデータベース新製品「Oracle TimesTen In-Memory Database 11g」の発表会へ行ってきました。
TimesTenはインメモリー処理に最適化されたリレーショナルデータベースです。複数のサーバ(ノード)をキャッシュグリッドと呼ばれる1つの巨大なメモリキャッシュとして扱うことができ、キャッシュグリッドは処理容量に応じてスケールアウトが可能。そのキャッシュグリッド上にデータベースの表全体を展開することができます。もちろん、ノード間で同時実効性とトランザクションの一貫性が管理されています。
Oracle Clusterwareと連係すると、キャッシュグリッドのレプリカを2重、3重に作ることができて、プライマリのキャッシュグリッドのノードに故障があった場合、自動的にフェイルオーバーを実行して可用性を実現します。
TimesTenの今回のバージョンからはPL/SQLもOracle完全互換になり、Oracleと同様の操作が可能。もちろん現実のインメモリデータベースとしては当然のことながら、永続化の手段としてディスクへの保存をサポートしています。
TimesTenの事例として紹介されたのは、日本航空のWebサイトで「最も安い運賃を探す」という機能です。この機能の裏でTimesTenが稼働しており、さまざまな航空路の中から条件にあった最も安い運賃を見つけるために何千(!)ものSQLを実行し、一瞬で答えを表示してくれる、とのことです。
つまりオラクルの説明を聞く限り、永続化の手段として大量のメモリが使えて(もちろんディスクに保存できて)、そのメモリ上でデータの整合性や一貫性を維持したまま、SQLの操作によってCRUD(Create、Read、Update、Delete)を実現するという、先ほど想像したクラウド時代のインメモリデータベースの要件をほぼ満たしているように思えます。
スケールアウトによる新たな可能性
TimesTenの説明を聞いて新たに発見したのは、インメモリデータベースは単にメモリ上にデータを置いているから速いというだけでなく、キャッシュグリッドのスケールアウトによって性能向上ができる、という点です。データベースが巨大になったり利用者が増えた場合には、キャッシュグリッドのノードを増やすことで対応できます。
いままでリレーショナルデータベースは基本的にスケールアップでしかスケーラビリティを拡張できませんでした。ハードウェアで性能を上げるには、ばかでかいマシンにお金を投じる以外なかったのです。そして運用中のサーバ移行というのはとても面倒なので、最初から大きめのサーバを用意しておくことはデータベースではよくあることでした。
しかしキャッシュグリッドのスケールアウトによって性能向上の手段が提供されることで、初期段階でのサーバ構成を安価に設定することも可能になりますし、性能が不足してきた時点での投資額もそれほど大きくなくなります。なにより、全体を安価なサーバの集合体にすることでハードウェア構成への投資額そのものを減らせる可能性も大きいでしょう。
現実に、こうしたスケールアウトはどこまでうまく機能するのでしょうか? 耐障害性はどれだけあるのでしょうか? オラクル以外のベンダの製品はどうなっているのでしょう? ようやく調べ始めたばかりでこのエントリを書いたところです。さらに勉強していきたいと思います。情報などあればぜひコメント欄などで教えてください(あるいはこの記事に対するご指摘などがあればぜひ)。