NoSQLデータベースはRDBMSに比べて並列処理で性能を上げていけるという特長がある反面、単純なデータ構造しか扱えないとか、データの並べ替えなどが難しいという難点があります。今回からは、NoSQLを使いながらも、RDBMSが備える機能を部分的に実現する方法を解説していきます。(編集部)
前回は、リレーショナルデータベース管理システム(RDBMS)からデータを読み出す流れを詳しく見ていきました。問い合わせを受けてから結果セットを動的に作って返すRDBMSのやり方では、分散環境においては十分な処理性能を発揮できないということがご理解頂けたかと思います。
RDBMSはデータの結合や検索のほかにも、データ集計や並べ替えなど、SQLを使った問い合わせ内容に応じてさまざまな形にデータを加工する機能を備えています。多様な要求に応えてくれる問い合わせ機能はRDBMSの魅力でもあるのですが、大量のリクエストを処理するWebサービスでは、1台のデータベースサーバですべてのデータを加工するようにしてしまうとデータベースサーバがボトルネックとなってしまいます。
RDBMSの反省をふまえて登場したNoSQLデータベースでは、大量のアクセスを処理するために扱えるデータ構造をシンプルなものに絞り、処理速度を高めるために最小限の読み書きアクセス機能だけを備えています。スケーラビリティを追求するためにNoSQLデータベースを選択してデータベースを利用したアプリケーションを開発するときは、RDBMSならSQLで簡単に実現できていた複雑な検索やデータ加工機能は利用できないと思ってください。
NoSQLデータベースが搭載していないようなデータ加工処理を実現するには、データベースに加工処理を求めるのではなく、アプリケーション側で(自前で)実装することになります。今回は、RDBMSが実現しているさまざまな読み取りアクセス処理をNoSQLデータベースでどのように実現するかということを考えることにしましょう。
ひとくちにNoSQLデータベースといっても、第1回で紹介したとおり、その形態や特徴は多岐にわたります。そこで今回は、NoSQLデータベースの中でも比較的数の多い「KVS(Key-Value Store)」と呼ばれるデータベースを例にして考えていくことにしましょう。
KVSはその名前の通り、キー(Key)と値(Value)のペアでできているデータ構造です。厳密には「キーが1つ、値が1つ」のデータ構造を指すものですが、扱いやすい表形式のデータ構造に似せて読み書きできるよう、1つのキーを指定したら複数の値をまとめて取得できるようにしているデータベースもあります(図1)。
このようなタイプのデータベースは「列指向データベース管理システム(Column-Oriented DBMS)」とも呼びます。これも、広義ではKVSの一種と見てよいでしょう。KVSの例としてはGoogle Bigtable、Windows Azure Table Storage、Amazon SimpleDB、Apache HBase、Apache Cassandraなどが挙げられます。
Copyright © ITmedia, Inc. All Rights Reserved.