性能検証!インメモリDB
インメモリDBを知る
「第2回:検証!RACの耐障害性と拡張性(http://www.thinkit.co.jp/article/96/2/)」では、Oracle Real Application Clusters(以下RAC)の耐障害性と拡張性を有効に活用する手法について触れ、最後にパフォーマンス向上のために考慮すべき点をご紹介しました。
しかしそれらを考慮したとしても、オンライン証券など高トランザクションを求められるシステムでは、ディスク型RDBMSで対応することには限界があります。そこで今回は最近注目を集めているインメモリDBを取り上げ、どのように高トランザクションシステムを処理していけるのかを紹介します。
最近インメモリDBという言葉を聞く機会が徐々に増えてきました。大手ベンダだけでもTimesTenを買収したOracle社、solidDBを買収したIBM社、自社製品を開発している日立製作所や富士通、そのほかインメモリDBを国策として取り組んでいる韓国ベンダの製品などがあります。
こうした背景にはCPUやメモリの価格下落や64bitOSの普及により大容量のメモリを扱えるようになったという技術的要因と、インターネットや携帯電話の普及によりリアルタイム性を求められる高トランザクションシステムが増えたという顧客要因の2つがあります。
しかしインメモリDBには、「すべてのデータをメモリ上に展開しているため速いが、障害時にはデータがすべて消えてしまうので怖くて使えない」「ディスク型RDBMSでもメモリ領域を大きく取れば性能差はなく、わざわざインメモリDBを導入するメリットはない」という意見も聞かれます。
しかしこれは大きな誤解です。今回は同じOracle製品としてRACとの連携が容易なTimesTenを取り上げ、インメモリ製品を導入するメリットについて説明していきます。
TimesTenのアーキテクチャ
まずTimesTenの主な特徴について順に説明していきましょう。
1つ目がインメモリDBという名の通り、すべてのデータをメモリ上に格納することです。さらにデータだけでなく、一時領域や索引もすべてメモリ上で処理します。そのためディスクアクセスを発生させずにアプリケーションを処理することが可能です。
TimesTenはすべてのデータがメモリにあることが前提のため、アプリケーションは共有ライブラリをリンクしてダイレクトに共有メモリへアクセスします。つまり無駄なインストラクションがないため、少ないCPUリソースしか使いません。
一方、ディスク型RDBMSはすべてのデータがメモリ上にある保証がないため、たとえメモリ上に格納されていても、TimesTenに比べて少しずつオーバヘッドが発生してCPUリソースを消費してしまいます。
2つ目がレスポンスタイムが非常に速いことです。1行の検索であれば数マイクロ秒、1行の更新であっても数十マイクロ秒もかかりません。ディスク型RDBMSではどんなにチューニングしたとしてもミリ秒が限界と言われていますので、TimesTenのレスポンスタイムがけた違いに速いことがわかります。
3つ目がTimesTenはアプリケーション層に配置(=アプリケーションと同居)することです(図1)。これにより、最高のパフォーマンスを発揮します。
4つ目が標準のAPI(SQL92,ODBC,JDBC)によるアクセスが可能なことです。ほかのインメモリ製品の場合、性能を重視して製品固有のAPIを使用している場合があります。しかしTimesTenは標準APIに準拠しているため、ODBCやJDBCで接続してSQLで処理を行うことが可能です。そのため既存アプリケーションの改修が少なくて済みます。
5つ目がディスクへのログ出力による永続性の保証です。TimesTenは、チェックポイント処理のタイミングでメモリ上に保存された全データのスナップショットをディスクに書き出します。また、トランザクションログも随時ディスクに書き出しているため、障害が発生しても最新のログファイルを取得した時点までデータの復旧が可能です。
6つ目がほかのRDBMS同様に行レベルロックと読み取り一貫性が保障されることです。これによりコミットやロールバックが可能です。
7つ目がTimesTenの冗長構成を実現するレプリケーション機能です。TimesTen同士のデータの同期をはかるため、非同期、亜同期、同期の3種類のレプリケーションモードが用意されています。
8つ目がOracle DatabaseとTimesTenのデータの同期をはかるCache Connect to Oracle機能です。Oracle Databaseで更新されたデータをTimesTenへ、またはTimesTenで更新されたデータをOracle Databaseへ伝播することが可能です。
いかがでしょうか。TimesTenのアーキテクチャを理解することで、インメモリDBと言ってもほかのディスク型RDBMSと同じように考えられることがわかったのではないでしょうか。
次ページでは、実際のところTimesTenがどのくらい速いのか、性能検証の結果から見ていきましょう。