RDBの機能をNoSQLで実現する(1)RDB開発者におくるNoSQLの常識(3)(2/3 ページ)

» 2011年04月25日 00時00分 公開
[渡辺俊史株式会社システムインテグレータ]

NoSQLに足りない部分は自分で作る

 表1を見てください。これはRDBMSが扱うテーブルとKVSが扱うテーブルの性格の違いをまとめたものです。RDBMSが扱うテーブルついてはよくご存じの方も多いのではないでしょうか。これと比較すると、KVSが扱うテーブルには「列はデータ型を持たない」「キー(ID)を指定して特定した行にアクセスする」「独自のデータアクセスAPIを使う」「データの格納ルールが決まっている」といった特徴があります。

 RDBMSではデータ型のチェックやテーブル結合、データ集計などができますが、KVSはかなりシンプルな機能しか提供していません。当然、いままでRDBMSで利用できていた機能の中には、KVSでは利用できないものがあります。このような機能を実現するには、アプリケーション側で工夫する必要があります。

RDB KVS
データ型 列にデータ型を設定して使う。型に合わない値を入力しようとするとエラーになる 型情報をもたない。すべて文字列(あるいはバイト列)として格納
データ読み取り 問い合わせ言語(SQL)を使う キー(ID)指定による1行分の読み取りが基本。独自APIでデータにアクセス
データの加工 テーブル結合、検索、集計、並べ替えなどが可能 基本的に不可能。加工機能があるとしても最小限の機能
データ格納方法 RDBMSによって隠ぺいされているので、開発者は意識する必要がない キー順などでソートして格納
一貫性保持のしくみ RDBMSがロック、制約、トランザクションといった一貫性を保持するための機能を提供 整合性は確約されない。整合性を確保する機能があったとしても最小限の機能
表1 RDBとKVSのデータの扱い方の違い

 ここからの説明では、一般にNoSQLデータベースが備えていない機能を実装するという前提で話を進めていきますが、製品・サービスの中には高機能なデータアクセスAPIやSQLライクな問い合わせ言語を用意しているものもあります。製品が提供している便利な機能があるのであれば、無理に自前の実装を使わず製品提供の機能で開発を進めていくのも1つの方法でしょう。

「転置インデックス」を利用してデータを絞り込み

 RDBMSではSQL文にWHERE句で検索条件を指定すれば、テーブルから簡単に目的のデータだけを抽出できます。一方、KVSからデータを選択して引き出すには、キーを指定して該当するデータを取得するのが原則です。もちろん、データを全件読み取ったうえで必要なものをピックアップすれば、目的のデータを得ることはできますが、かなり効率の悪い方法としか言えません。

 検索というテーマに限っていえば、NoSQLデータベースはRDBMSほど便利に使えないことは事実です。しかし、便利にする方法はあります。例えば、検索対象となるテーブルの外部に「転置インデックス」と呼ぶデータ構造を用意すれば、NoSQLデータベースでもキーワードを使った検索が可能になります(図2)。

図2 転置インデックスを用意してキーワード検索を可能にする 図2 転置インデックスを用意してキーワード検索を可能にする

 「転置インデックス」とは、データ中の数値や単語に対して、データの位置を特定する情報を対応させたデータ構造です。「逆引き索引」とも呼びます。身近な例としては、「本の索引」が挙げられます。

 例えばプログラミング言語の解説書のように情報量が多い本を、頭から1ページずつ目的の情報が見つかるまで読み続けるのは、あまり効率が良いとは言えません。技術書ならば、巻末に索引のページがあるのが普通でしょう。皆さんもまず索引からページ番号を探し、目的のページを開くのではないでしょうか。

 索引ページには、アルファベット順(あるいは五十音順)に並べられた見出し語と、見出し語が載っているページ番号が一覧になって載っています。索引を使うと、見出し語が載っているページを素早く見付けられます。これと同じように、KVSの列の情報を対象にデータ検索をするときは、列にあるデータとキー情報を使って、転置インデックスを作成します。

 図2のような転置インデックスを利用すれば、検索対象となるキーワードをIDに置き換えてデータを取得できます。なお、ここでは説明を簡単にするため、値が完全に一致するケースを想定して話を進めましたが、アプリケーション側の実装を強化することでSQLのような大小比較、範囲検索(BETWEEN)、パターンマッチ(LIKE)などの方法で検索することも可能です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。