情報システムでは、様々な構造のデータを扱う。RDBだけで処理していた時代は、表とその関連付けをデータごとに設計することで対処していた。NoSQLとRDBが存在する今は、その使い分けが課題になってきた。
NoSQLとRDBを組み合わせる
例えばNECは、約5000万台の自動車に対して渋滞情報やクーポンなどを配信するデモシステムで、分散KVSと列指向型のデータベースを組み合わせた分散システムを開発した(図3)。NECの千嶋博システムプラットフォーム研究所研究部長は「複数のデータベースを使い分けるのは、シンプルなモジュールを組み合わせて、スケ ールアウトしやすい基盤を確立するため」と狙いを説明する。
分散KVSの役割は、毎秒100万件のデータの格納だ。自動車の位置情報や速度などの運転状況、クーポンの利用履歴を5000万台分、漏れなく記録する。
分散KVSのソフトウエアは、NECが独自開発した。重視したのは、トランザクション処理の一貫性だ。複数のデータベースクライアントが同時に更新しようとした際に、データの矛盾が起こらないようにした。「一貫性を保つ仕組みを用意しなければ、基幹系では使いにくい」(NECの鳥居隆史システムプラットフォーム研究所研究マネージャー)と判断した。
具体的には、データベースクライアントごとに仮想的な更新領域を設けて、その領域のデータに対して更新をかける。データベースクライアントが元データに直接書き込むのではなく、分散KVSがコピーした更新対象にデータを書き込む手法である。
もう一方の列指向型データベースは、クーポンの利用履歴や利用率などを店舗や地域ごとに分析するのに使う。
これら分散KVSサーバーや分析用サーバーは、すべてスケールアウトが可能だ。デモシステムを構成するサーバーの数を増やせば、1秒ごとのリアルタイムデータ処理も実現可能という。