X

An Oracle blog about Oracle Coherence

【技術コラム 第1回】 増え続けるデータに対処せよ! その2

Guest Author

インメモリ型データ管理の3つの方式

現在、インメモリ型のデータ管理方式には、大別して3つの種類がある。以下に、それらについて簡単に説明する(それぞれの特徴を表1にまとめたので、併せて参照されたい)。

インメモリ型のデータ管理方式の主な特徴

クリックすると拡大図がご覧になれます

インメモリRDBMS

1つ目は「インメモリRDBMS」だ。これは、その名が示すように「メモリ上で動作するRDBMS」であり、構成やインタフェースはRDBMSと同じだ。ただし、データをディスクに書き込まずに常時メモリ上に置くため、SQL 文の処理が高速に実行できるというメリットがある。アプリケーションから見れば通常のRDBMSなので、既存システムへの組み込みが容易に行える。

インメモリ・キャッシュ

「インメモリ・キャッシュ」とは、「アプリケーション・サーバ上に、アプリケーションから利用しやすい形式でデータを保持(キャッシュ)する」という、従来からシステム構築の中で工夫として実践されてきた手法を拡張したものである。主にデータベースなどから取得したデータを一時的に保持しておき、2回目以降のデータの読み取り速度を速める目的で使われる。
このインメモリ・キャッシュには、次の2つのタイプがある。

  • 複数のサーバで構成されるアプリケーション・サーバ層において、それぞれのサーバにあるキャッシュ間のデータを同期するタイプ(レプリケーション型)
  • データ全体を複数のサーバに分散してキャッシュするタイプ(分散キャッシュ型)

例えば、レプリケーション型のインメモリ・キャッシュであるレッドハットの「JBoss Cache」を使う場合、リスト1のようにJava Map APIと同様のput/getメソッドによってデータを操作する。Java 開発者にはなじみの深いコーディング・スタイルを提供する一方で、背後では各サーバ上のキャッシュのデータを同期してくれるのだ。

リスト1:JBoss Cache 3.0を使う場合のデータをキャッシュに格納するコード(Java Map APIを使った通常のJavaプログラミングと大差ないコードでキャッシュの操作が可能)

// 別途定義されたクラスPersonにデータを格納し、キャッシュする
// CacheFactory、DefaultCacheFactory、Cache、Fqn、NodeはJBoss Cacheのクラス
CacheFactory factory = new DefaultCacheFactory();
// キャッシュの作成
Cache cache = factory.createCache();
Fqn personData = Fqn.fromString("/person");
// キャッシュを行うノード(キャッシュ・ノード)としてPersonを追加
Node personNode = cache.getRoot().addChild(personData);
// 新規Personオブジェクトにデータを格納
Person p1 = new Person(1234, "田中", "太郎", "東京都港区");
// キャッシュ・ノードへのデータの追加
personNode.put(1234, p1);

インメモリ・データ・グリッド

インメモリ・キャッシュの機能を包含しつつ、さらに高度な機能を提供するのが「インメモリ・データ・グリッド」と呼ばれる方式である。この方式はインメモリ・キャッシュからの派生形であり、リスト2に示すようにアプリケーションから操作する際のコードのスタイルも類似している。ただし、データをキャッシュするだけでなく、データの書き込みまでサポートしており、実質的にインメモリのストレージとして機能する。1つ目のインメモリRDBMSとの違いは、高度な分散キャッシュの機能を備え、リスト2のようにアプリケーションからは通常のJava APIを扱うかのように利用できる点だ。なお、バックエンドのデータベースとは非同期で連携するよう設計することが多い。
インメモリ・データ・グリッドのアプローチは、グーグルやアマゾンなどがクラウド・コンピューティング・サービスの提供基盤となる自社インフラの構築に用ている手法と類似している。実際、インメモリ・データ・グリッドでは、グーグルの分散処理技術であるMapReduceと同様、分散配置されたキャッシュの各ノード上でデータ処理を並行して実行することができる(詳細は後述)。企業システムにおいて、例えばインメモリ・データ・グリッドを独立した層としてアプリケーションとデータベースの間に配置すれば、複数のアプリケーションから利用可能な統合データ・サービスを構築できるだろう。
なお、この方式が最初に活用されるようになったのは、IT系のベンチャー企業がひしめくWeb 2.0などの新たなビジネス領域ではなく、欧米の大手証券会社や銀行の業務システムであることを付け加えておく。こうした、システムの高速性と信頼性が特に重視される分野で使われ、発展してきた技術が今日、他の分野でも利用されつつあるのだ。

リスト2:オラクルのインメモリ・データ・グリッド製品「Oracle Coherence」でデータをキャッシュに格納するコード(コーディング・スタイルはJBoss Cacheとほぼ同じ)

// 別途定義されたクラスPersonにデータを格納し、キャッシュする
// CacheFactoryはOracle Coherenceのクラス
// Personキャッシュの作成
Map personCache = CacheFactory.getCache("person");
// 新規Personオブジェクトにデータを格納
Person p1 = new Person(1234, "田中", "太郎", "東京都港区");
// キャッシュ・ノードにデータを追加
personCache.put(1234, p1);

以上のように、インメモリ型データ管理方式には3 種類があるが、このうち本稿では、最も新しく、なおかつ今後の企業システム・アーキテクチャに大きな影響を及ぼすと見られるインメモリ・データ・グリッド方式にフォーカスを当て、その概要や、同方式を活用したシステム・アーキテクチャの例を紹介していく。

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.

Recent Content