NoSQLは、大量データを高速に入出力する機能に特化している。そのため、取り出したデータから必要なデータを検索したり、集計してグラフ表示に利用したりといった加工処理は、データベースクライアント上のアプリケーションとして開発する必要がある。

取り出してからデータを加工

 当然、「RDBを使う場合より開発の工数は増える」(日本マイクロソフトの鈴木祐巳クラウド&アプリケーションプラットフォーム製品部エグゼクティブプロダクトマネージャー)。こうした開発負担を軽減するため、データ操作の効率化を進めている。

 NoSQLの効率化は二つの方向性がある。一つは、データの加工処理をクライアントからサーバーにオフロードする手法。もう一つは、汎用的な操作をまとめたプログラム部品の提供だ。その双方を実現したNoSQLの例が、インテックシステム研究所が開発した「EXAGE/Database」である。

図5●インテックシステム研究所の分散KVS「EXAGE/Database」の仕組み
図5●インテックシステム研究所の分散KVS「EXAGE/Database」の仕組み
KVSサーバー内で集計や照合などを行うJava実行環境を用意することで、データベースクライアントで記述するプログラムを簡略化できるようにした
[画像のクリックで拡大表示]

 EXAGE/Databaseは、サーバー側でデータを処理する機構を持つ(図5)。KVSサーバー内で集計や照合などを行うためにJavaの実行環境を実装し、本来はデータベ ースクライアントで動かすプログラムを実行できるようにした。

 さらに、認証や課金、ログ解析といった機能を持つプログラムライブラリーを用意。開発者がライブラリーを利用すると、データ処理のプログラムが「ジョブ」としてKVSサーバーで実行される。

データの近くで高速に処理

 EXAGE/Databaseは、KVSサーバー上でプログラムを実行することで、サーバーリソースの有効利用も実現している。「KVSの処理は基本的にはデータを入出力するだけ。そのまま使うと、多数のノードでCPUリソースが無駄になる」(インテックシステム研究所の中川郁夫取締役クラウド事業準備室副室長)。データの集計機能を持たないKVSは、CPUリソースをあまり使用しない。分散KVSから読み出したデータをクライアント側で加工する負荷を、サーバーとクライアントで分け合うことでシステム全体のリソースの有効利用が可能になる。

 ドキュメント指向のNoSQLである「MongoDB」もJavaScriptの実行環境を備える。任意のJavaScriptを実行でき、MongoDBサーバーでのデータ加工が可能だ。NoSQLを実行するサーバーはCPUリソースに余裕があるので、そこで行う処理機能を増やす方向にある。

 「扱うデータが増え続ける一方で、サーバー間のネットワーク帯域はそれほど増えていない。データの近くでプログラムを動かした方が処理効率が高い」(サイベースの原利明プロフェッショナルサービス本部長兼セールスエンジニアリング部長)ことも理由の一つだ。