インメモリデータベースとはコンピューターのメモリ(主記憶装置)上でデータを管理するデータベースです。本記事ではインメモリデータベースのを通常のデータベースと比較してのメリット・デメリットを解説します。
インメモリデータベースとは
インメモリデータベースとはその名の通りコンピューターのメモリ(主記憶装置)上でデータを管理するデータベースです。ハードディスクやSSD(補助記憶装置)上にデータを保管する従来のデータベースよりも高速にデータの読み書きが出来るのが特徴です。
しかしメモリには大きな弱点もあります。現在のコンピューターで主に使われているメモリであるDRAMは電源の供給がなくなる、つまりコンピューターの電源がオフになると保存されているデータが消失することです。
そのためインメモリデータベース製品では電源が消失した際にデータを復旧する機能を備え、データを永続化しています。
多くのインメモリデータベースでは、スナップショットとトランザクションログの組み合わせで永続性を保証します。以下では一般的なデータベースの永続化の仕組みを説明します。
データベースのある時点での状態(スナップショット)をチェックポイントファイルとして保存します。また、トランザクションが完了したとき、データベースに変更が加わったときにトランザクションログをディスクに保存します。トランザクションログはずっと取得し続けるとサイズが大きくなりすぎるので、スナップショットを取得したタイミングでクリアされます。
サーバーの電源が落ちた際には、スナップショットを用いてある時点までのデータベースの状態を復元し、その後スナップショット取得以降のトランザクションログをもとに再度データベースを変更することでデータ復旧を行います。
近年はコンピューターの電源が切れても保存したデータが消失しない不揮発性メモリに対応したインメモリデータベースが登場しています。この不揮発性メモリにデータを保存することで、ハードウェア障害時にディスクからの復元よりも素早くデータを復旧することができます。
とはいえ不揮発性メモリは揮発性メモリに比べると速度が10分の1程度に落ちます。そのためデータ更新など高速なデータの読み書きが必要となる領域は揮発性メモリに配置する等の工夫で、性能を落とさずにデータベースの可用性向上が可能です。
インメモリデータベースのメリット
インメモリデータベースのメリットは、前述したようにデータの読み書きが非常に高速になることです。パフォーマンスが上がる理由のひとつは、メモリはディスクと比べて100倍程度応答速度が早いことです。
加えて、インメモリデータベースはデータ構造、データアクセスがメモリ向けに最適化されているので、従来のデータベースよりも高速な処理が可能になっています。そのため、インメモリ向けでないデータベース製品を使用し、データをメモリに配置したとしても、インメモリデータベース製品と同等の速度向上は望めません。
また、処理をメモリ上で完結するため、従来の「まずメモリに目的のデータがあるかどうか確認し、なければディスクからデータを取得する」という処理をする場合に比べてCPUリソースの消費をおさえ、他の処理にリソースを割くことができるというメリットもあります。
インメモリデータベースのデメリット
インメモリデータベースの主なデメリットは、ディスク上にデータを保存する場合と比べてハードウェア障害などでデータを消失するリスクが高いことです。これはメモリ上のデータはサーバーの電源を落とすと消えるためです。近年のインメモリデータベース製品はデータ復旧のための機能が充実しており、このデメリットをかなりカバーできるようになってきてはいます。
もう一つのデメリットとしては、大きなデータを扱う場合、他の処理に使用できるメモリの容量が少なくなることです。近年のメモリはかなり容量が大きくなっていますが、それでもディスクに比べると小さいです。そのためよりリソースの管理がシビアになるといえるでしょう。
またインメモリデータベースを導入するためにはサーバーに大容量のメモリを搭載する必要があることもデメリットといえます。同等の容量のハードディスク、SSDと比べてメモリは高価です。インメモリデータベースの運用に耐えうるメモリを搭載するためにはそのぶんコストがかかります。
インメモリデータベースの製品
以下では代表的なインメモリデータベース製品をご紹介します。
Oracle Database In-Memory Option
長年世界で高いシェアを誇るOracle Databaseのインメモリデータベース対応版です。Oracle Database向けに開発されたアプリケーションを変更することなく、インメモリデータベースを導入することができます。
大きな特徴は従来のフォーマットであるロー型(行単位でデータを処理する、一般的な関係データベースで採用されている形式)と、カラム型(列ごとにデータを処理する、フィールド単位での集計処理などに向いている形式)の両方を同時にメモリにロードして使用できることです。ロー型とカラム型はリアルタイムに同期され、データの整合性が保たれています。
この機能によってアプリケーションの運用(データの更新)とリアルタイムのデータの分析を同時に行うことが可能になります。
Oracle Times Ten
2005年にTimes TenをOracleが買収したことでOracle提供となったインメモリデータベースです。その後のバージョンアップによってOracle Databaseとの親和性が高くなり、Oracle Database Enterprise Editionのオプションとしても提供されています(Times Ten Cache)。
Times Ten CacheはOracleデータベースの一部をキャッシュすることで、応答時間を短縮することに適しています。2009年には日本航空のインターネット国内線運賃・空席検索システムにおける最安値運賃検索機能に採用されました。
SAP HANA
ドイツのベンダーSAPが提供する列指向インメモリデータベースです。データベース管理システムのみならず、アプリケーション開発環境やデータ分析機能を備えています。
SAP HANAはその時点でのデータベースの状態を保存し、定期的に更新されるセーブポイント、同じくデータベースの状態を保存し、上書きされないスナップショット、データベースの変更履歴を記録するトランザクション・ログの組み合わせで永続化を行っています。
Redis
オープンソースソフトウェアのインメモリデータベースです。最大の特徴は、キーと値の組み合わせでデータを保存するキーバリュー型のデータベースということです。キーバリューストアは関係データベースよりも構造がシンプルで分散処理がしやすく、パフォーマンスがあがりやすいというメリットがあります。そのため非常に高速な処理が実現可能です。
またリスト型・セット型・ハッシュ型などの複数の種類のデータ型に対応しており、従来のキーバリューストアよりもデータ型に縛られない柔軟なデータ操作が可能です。
Redisはデータ永続化のための機能として
・スナップショットの取得
・ログの取得
が提供されており、いずれかを選択することができます。あるいは両方を組み合わせることもできます。また、両方を無効としてサーバーの電源が入っている間のみデータを保管することもできます。
まとめ
インメモリデータベースはメモリ上にデータを置くことによって、応答速度を大きく向上させることができます。レスポンスの要件がシビアなシステムにおけるデータベースの有力な候補になるでしょう。またデータベースへの読み書きがボトルネックとなっている場合、インメモリデータベースへの移行も選択肢のひとつとなり得ます。今回のメリット・デメリットを踏まえてご検討いただければと思います。
- カテゴリ:
- キーワード: