「インメモリデータベース」、すべてのデータをメモリに入れる超高速データベース
この記事は、日経SYSTEMS 6月号に掲載された連載「新野淳一の技術インパクト」第3回のオリジナル原稿をPublickey掲載用に編集したものです。Publickeyでは日経SYSTEMS編集部との合意を得て、雑誌発行から一定期間後に記事をPublickeyに掲載しています。
インメモリデータベース
現在、ほとんどあらゆる業務アプリケーションのバックエンドには、リレーショナルデータベースが存在する。そのリレーショナルデータベースは、1980年代に商用製品が登場した当初から大きな課題を抱えてきた。遅い、という課題だ。
この課題を解決するために、最近ではハードディスクの代わりにフラッシュドライブを用いたり、NoSQLデータベースなどが登場しつつあるが、大きく注目され実用化も進んでいるのが「インメモリデータベース」である。
文字通りすべてのデータをメモリ上で保持することにより圧倒的な速度を実現するインメモリデータベースは、リレーショナルデータベースの「遅い」という課題の大部分を解決してしまう、データベース技術者にとって夢のような技術だ。
しかもハードウェアのトレンドを見れば、メモリはますます安価かつ大容量化することは確実であり、サーバの搭載メモリは大容量化の一途をたどる。この豊富なメモリをいかに活用するかがソフトウェアの進化の方向性と考えると、インメモリデータベースはこれからのリレーショナルデータベースの方向性を明確に示すものだと言える。
大規模データ処理やリアルタイム処理などへ広がり
従来のリレーショナルデータベースの高速化は、いかにハードディスクへのアクセスを少なくするか、アクセスパターンを単純化するかが非常に重要だった。データベースのチューニング作業では、キャッシュメモリを目的に応じて最適化することで性能が数倍以上改善されることも少なくない。だったらすべてのデータをメモリに乗せてしまえ、というのがインメモリデーベースの基本的な考え方だ。
単に大量のメモリを搭載したサーバ上でリレーショナルデータベースを実行すれば高い性能が得られるのであれば、従来のデータベースにメモリを載せるだけで済むはずだ。専用のインメモリデータベースを使う意味はどこにあるのだろう?
従来のデータベースでは、あくまでもデータはハードディスクにあることが前提であり、メモリ上のデータは「キャッシュ」としての扱いである。そのため、キャッシュ内のデータが最新であるかなどのチェックを裏で行っているし、データの保持方式もハードディスク向けに最適化され、メモリ上のデータには最適化されていない。つまり、メモリを大量に積めば高速になることは間違いないが、まだまだ最適化の余地は大きいということだ。
従来のデータベースとインメモリデータベースの両方を製品として提供しているオラクルのドキュメントによると、従来のデータベースではキャッシュメモリを最大化した状態での反応速度はミリ秒(1000分の1秒)単位であるのに対し、インメモリデータベースの反応速度はマイクロ秒(100万分の1秒)単位とのこと。つまりインメモリデータベースは少なくとも1000倍以上速い。大規模なデータ分析やリアルタイム処理など、データベースの活躍の場を広げることになる。
データベースを理解した技術者は必要
インメモリデータベースが普及すれば、プログラマはよほど高度な処理でない限り、性能を気にしたり、チューニング作業に手間をとられることをほとんど気にせず、データベースを「高速なデータのための箱」として扱えることになりそうだ。
一方でインメモリデータベースでもメモリ上のデータが障害時にも失われないように、ディスクに書き出すチェックポイントをどのタイミングで設定するかといった最適化は引き続き必要になるし、非効率なデータアクセスを繰り返すSQL文の実行やロックの競合などが発生すれば、インメモリデータベースといえども性能の劣化は発生するだろう。引き続きデータベース内部のことを理解した技術者は求められるはずだ。
あわせて読みたい
Linuxのサポートを開始したWindows Azure、「オープン性を特に意識した」新機能を解説。Go Azure(前編)
≪前の記事
2013年予定のjQuery 2.0、IE8以下はサポート廃止の方針