X

An Oracle blog about Oracle Coherence

【技術コラム 第2回】 インメモリ・データ・グリッドの基本的な仕組みと効果 その2

Guest Author

インメモリ・データ・グリッドが提供する付加機能

インメモリ・データ・グリッドは、核となるキャッシュ機能のほかにも、有用な付加機能を提供している。オラクルのOracle Coherenceを例にとり、そうした機能をいくつか見てみよう。

クエリ機能

通常、キャッシュとの間でのデータ入出力では、先にリスト2に示したようなput/getメソッドを使ってキー・アクセスを行う。だがこれでは、 RDBMSで言えばプライマリ・キーによる問い合わせしかできないのに等しい。そこで、インメモリ・データ・グリッド製品には、任意の属性値を条件にしてクエリを発行する機能が用意されている(リスト3。これは単純な例だが、条件を階層化して複雑な検索を行うことも可能)。
なお、Coherenceの場合、リスト3のようなコードを実行すると、複数ノードでパラレルにクエリが発行される。また、クエリ性能を高めるためのインデックスの作成もサポートしている。

リスト3:データのクエリ

// 「商品番号として100を持つ」という条件を設定
Filter filter = new EqualsFilter("getProductId", 100);
// 条件を付加して検索を実行
Set orders = orderCache.entrySet(filter);

イベント・リスナ機能

これは、キャッシュ・データが変更されたことをアプリケーションに対してイベントとして通知する機能だ。イベントの発生に応じてロジックを起動したり、変更を監査したりといったことに使える。これもJava開発者にはなじみ深いJavaのイベント・モデルのスタイルを採用しており、変更イベントを検知するリスナを作成し(リスト4)、それをキャッシュに登録するだけでよい(リスト5)。
ちなみに、Coherenceの場合、リスナ・クラスの各メソッドに渡されるMapEventオブジェクトには、変更前後のデータが格納されており、メソッド内でそれらのデータを使うことができる。

リスト4:リスナ・クラスのコード

// 注文データの変更イベントを受け取るリスナ・クラス
public class ProcessOrderListener implements MapListener {
   public void entryInserted(MapEvent event) { /* 処理を記述 */ }
   public void entryUpdated(MapEvent event) {}
   public void entryDeleted(MapEvent event) {}
}

リスト5:リスナの登録処理

orderCache.addMapListener(new ProcessOrderListener());

データ処理のパラレル実行機能

これは文字どおり、データの加工を並列(パラレル)に実行する機能だ。例えば、データベースに格納されたすべての注文データに対して「商品番号が100である注文の割引率を0.1にする」という処理を行うケースを考えてみよう。
これをアプリケーション上で行う場合、条件に該当する注文データの読み込み、ループ処理による割引率の更新、データの再格納といった一連の処理を実行することになり、対象データが大量にある場合は処理時間も長くなる。データをデータベースで管理しているのなら、こうしたケースではストアド・プロシージャをデータベース上に定義して実行することで、データ転送処理を省き、アプリケーション側の処理負荷を下げるという手法をとるだろう。

Coherenceでは、それと同様の発想で、データ処理をアプリケーション側(クライアント側)ではなく、各キャッシュ・ノード上で実行する「Invocation」という機能を用意している(図4)。この機能を使うと、アプリケーション側ではデータの取得や更新したデータの再格納といった処理を行う必要がなくなり、またデータの更新処理も各キャッシュ・ノードでパラレルに実行される。そのため、大量のデータ処理を分散して効率的に実行することが可能だ。加えて、キャッシュ・ノードを増やせば自然に処理の並列度が上がるので、データ処理性能も拡張できる。

なお、データ更新や集計といった基本的な処理はCoherenceにあらかじめ用意されているが、それ以外に独自の処理を作ることも可能である。これを利用して、複数アプリケーションに共通のデータ操作処理を作ってキャッシュ側に配置しておけば、処理の効率化につながるとともに、インメモリ・データ・グリッド層を統合データ・サービスとしてプライベート・クラウドのように利用できる。

図4:データ処理のパラレル実行

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