インメモリデータベースを使用したアプリケーション開発

インメモリデータベースを使用したアプリケーション開発

Microsoft SQL Server や、Oracle Database、SAP HANA などのインメモリデータベース。データベースがインメモリになっただけで、アプリケーションのパフォーマンスについての考え方がかなり変わってくるのです。従来のデータベースとインメモリデータベースの違いから、インメモリデータベースによってどんなことができるようになるのか、考えてみましょう。

インメモリデータベースとは

昨今注目されている ビッグデータ ですが、それに伴い、大容量のデータを格納できる 大容量のデータベースの必要性 が高まっています。CPUの処理能力 が向上したことや メモリの容量が増大 したことにより、データを ディスクではなく、メモリ上に格納して処理 する 「インメモリデータベース」 が注目されています。ディスクに格納されたデータよりも、メモリ上のデータ のほうが格段に高速にアクセスできます。メモリは 揮発性 でコンピュータの電源を切ればデータが消失されますが、ログやスナップショット をディスクなどの補助記憶装置に書き込めば物理的な障害にも対応できます。このように データの永続性を保証 する役割は 「パーシステンスレイア」 と呼ばれています。

従来のデータベースのボトルネック

従来のデータベースアクセスの ボトルネック と考えられていた箇所には 2点あります。

従来のデータベースアクセスのボトルネック

  1. データベース内での ディスクアクセス
  2.  データベースサーバとアプリケーションサーバ間の ネットワーク上のデータ転送

1 については データをメモリ上に展開することにより解消 できます。新たにCPUのキャッシュ上へのデータアクセスの問題も起こり得ますが、これについては後述します。②については 「Code to Data」 の考え方により データフォーマットやデータ型の変換、計算処理などをデータベース側で実施 し、ネットワーク上を転送させるデータ量を極力少なくする方法を考えます。これについても後述します。

ハードウェアとソフトウェアの特性

インメモリデータベースは CPUの処理速度や並列処理を有効活用 しています。また、メモリも大容量になってきているので大量のデータを格納することもできます。ハードウェアの特性 が活かされることはもちろん、ソフトウェア面の特性 もあります。カラム指向、データ圧縮、パーティショニング などです。これらは正確には「インメモリ」とは別の概念ですが、「インメモリ」と併用 され、従来のデータベースと対比されるのでここで少し触れてみます。

カラム指向、データ圧縮とパーティショニング

カラム指向 は テーブルを カラム単位で読み取り、内部処理を行う方法 です。カラム指向に対し ロー指向 と呼ばれるものがありますが、現在の 大半のリレーショナルデータベースはこのロー指向 です。
ロー指向ではキーを指定し特定のレコードを検索することは問題ありませんが、特定のカラムの値を集計する場合は、一行ずつ処理するので時間がかかってしまいます。カラム指向では 特定のカラムの値だけを見る ためそれほど時間がかかりません。大量のデータを集計、分析するニーズが高まっている昨今では、このようなカラム指向の処理形式のほうが都合の良いこともあるのです。

カラム指向でデータアクセスを高速化するのと同時に データを圧縮 して容量を軽量化したり、パーティショニング といって 複数のCPUで並列処理 したりしてハードウェアのリソースを有効利用する方法が考えられています。

Code to Dataの考え方

従来はデータベースサーバから抽出したデータをネットワークで転送し、アプリケーションのプログラム側で複雑な計算処理 を行い、データベース側の負荷を軽減させることもパフォーマンス対策として考えられていました。プログラム側のメモリ上でデータを処理するほうが、データベースでディスクアクセスするよりもパフォーマンスが良いと考えられていたからです。しかし、これでは 必要のない余計なデータまでもがネットワーク上を転送 し、この点ではパフォーマンスの良い方法とは言えません。

インメモリデータベース はそもそもメモリ上にデータが展開されているのですから、複雑な計算処理、データフォーマットや型の変換 までも データベース側で処理 させます。抽出され、ネットワーク上を転送するデータも必要最小限となり、ネットワークのパフォーマンスも向上します。

テキスト解析

これもインメモリデータベースの機能ではありませんが、分析に使われるデータベースシステムでは、ビッグデータによって データが大容量になる ことはもちろん、多様なデータを処理するニーズ もあります。特にweb上にはたくさんの書き込みもあり、それらを テキストデータとして解析 する機会も多くなります。このとき、データを一度プログラムの変数にコピーしてからテキスト処理を行うのではなく、データベースからデータを読むときに「あいまい検索」 や 「言語特有の文型の変化」 も加味したテキストの判別が必要です。

従来のデータベースでは、膨大なテキストデータを、ネットワーク転送をした後にプログラム側で処理をするためには、ハードウェア的にも限界がありました。インメモリデータベースにより、今まで行うことができなかったような処理や、それによる解析など、アプリケーションの開発 に可能性が拡がり、考え方もいろいろと変わってくるのです。

テクノロジーの進化により考え方が変わってくる、といったところにも、ぜひ注目してみると面白いかもしれません。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。