今、インメモリデータベースが注目を集めています。データベースの2大ベンダーであるOracleとMicrosoftが2014年に入って相次いでインメモリに対応した新バージョンを出しています。
まずは4月にSQL Serverエンジンに統合されたメモリ最適化データベースエンジンでOLTP向けに最適化された“インメモリOLTP”機能を実装した「SQL Server 2014」をリリース。7月には「Oracle Database 12c」の新バージョン12.1.0.2でインメモリ機能を追加するオプション製品“Database In-Memory”機能が追加されています。そしてインメモリデータベースとして先行するSAPの「HANA」は約6カ月間隔で新バージョンを出荷し、着々と機能を充実させています。
では、なぜ今データベースベンダーはインメモリ機能を実装してきているのでしょうか。それは、インメモリデータベースによって、データベース処理を大幅に高速化することが可能だからです。
インメモリデータベースとは何か
コンピュータは、CPUとメモリとディスクを主要な構成要素としています。ディスクに記録されたデータをメモリに読み込んで、メモリ上のデータをCPUで処理するという流れで動作します。
ディスクからデータを読み出す速度と、メモリから読み出す速度は大きく違います。応答速度では100万倍程度の差があります。データをすべてメモリ上に持って処理すれば、今よりも非常に高速な処理ができることになります。これをデータベースで実現するのがインメモリデータベースです。
つまりインメモリデータベースを使うと、今まで実現できなかったような高速な処理を実現できる可能性があるのです。
では、インメモリデータベースはどのような処理でも高速化できるのでしょうか。残念ながら現時点の技術では、データの更新処理を大幅に高速化することはできません。データを更新した場合、更新した内容を保持できる場所に書き込んで保存しておく必要があるためです。
メモリは電源がないとデータを保持しておくことができません。そのため、更新した内容はハードディスクなど、電源がなくてもデータを保持できる場所に書き込む必要があります。
この書き込みの必要性があるので、インメモリデータベースであっても、更新処理を大幅に高速化することはできないのが現状です。一方、検索処理は高速にアクセスできるメモリ上にあるデータを読み出せばいいだけなので、大幅に高速化できます。つまり、インメモリデータベースでは、検索処理は画期的に高速化できますが、更新処理は大幅には高速化できません。
一部のインメモリデータベース(Oracleの「TimesTen」や「MySQL Cluster」)では、更新した内容を書き込んで保存するのではなく、他のサーバのメモリ上にも同じデータを持つことによって更新データの安全性を確保します。この方式をとれば更新処理も高速に処理できます。
しかしサーバルーム全体の電源障害のような複数のサーバで同時に障害が発生した場合には、データを喪失してしまう可能性があり、使い道は限定されています。