IT業界に所属する皆様の間では、「NoSQL」というキーワードを目にすることが最近多くなったのではないでしょうか。

 しかし、「NoSQL」とは随分と乱暴な言葉だと感じます。 1つのコンピュータ上の表現にすぎない「SQL」に「No」をつけてしまう。「No」は「Not Only」の略だと言われますが、それなら大文字の「NOSQL」であるはず。

 「NOSQL」と表現している人々も確かにいますが、多くは「NoSQL」と表記しており、「どう見ても『ノー』だよな、これ」と感じ、「No」という言葉の持つニュアンスに反感を覚える人もいるようです。

 名前で損をする必要は無いので、表現を変えた方が良いような気もしますが、「NoSQL」という言葉は、そんな必要も無くなりつつあるくらい定着してきました。

 表現にはあまり目くじらを立てず、ビジネスの現場で実際に問題となる、この単語の「分かりにくさ」や誤解について、現場の目線で、解きほぐしていきたいと考えています。

「NoSQL」とは

 NoSQLの基本的な考え方については、多くの人が「何となく」理解しているのではないでしょうか。何となくは分かっているのだけど、いざNoSQLについて説明すると曖昧になってしまう、という人も多くいることと思います。

 そんな方のために、初歩の初歩としてNoSQLとは何かを簡単にご紹介したいと思います。非常に広い概念の言葉ですが、ここでは「SQLを使用しないデータベース製品」という狭義のNoSQLについて考えてみます。

 まず、その否定されている「SQL」とは何かから説明すると、「RDBMSに対する問い合わせ(クエリー)言語」といえます。

 それを否定するわけですから、「RDBMS以外のデータベース」ということになると思いますが、では、そもそもRDBMSとはどのようなデータベースなのでしょうか。

 皆さんよくご存じのRDBMSの特徴を挙げると、以下のようになります。

  • データの持ち方は行×列の表形式
  • 通常は複数の表(テーブル)を使用することを前提とし、各テーブルに設定したキー項目(コードなど)を使用して、他のテーブルと連鎖することによって、データを管理する(正規化)
  • データの管理単位は行。行の中の特定の列だけを限定してアクセスすることはシステムの動きとしてはできない(ロックは行単位)

 この「データの管理単位が行×列であること」「正規化すること」「ロックが行単位であること」がRDBMSをRDBMSたらしめている重要な構成要素です。

 これに対し、多数あるNoSQL製品の中で最も基本的なNoSQLデータベースである「キーバリュー」型について考えてみます(他にも様々なタイプがあります。他のタイプは別の機会にご紹介します)。

 「キーバリュー」とは文字通り、キーに対してバリュー(値)が紐づいて、データを管理している状態です。WindowsのiniファイルやJavaのプロパティファイル、プログラミングが得意な人にはハッシュと言えばピンと来るでしょうか。

 RDBMSと対比してみましょう。

  • データの持ち方は「キー:値」の対によるシンプルな形式。キーを渡すと値が返る
  • 正規化のような設計上の考慮は不要(必要があれば実装可能)
  • データの管理単位はあくまでも「キー:値」のペア。つまりロックは原則として「キー:値」のペア単位となる

 RDBMSは長くミッションクリティカルな業務で使われており、そのメリットも多くあります。その一方、キーバリュー型に代表されるNoSQLの方がRDBMSより向いている分野も多くあります。

 最近は米グーグルの様々なサービスやAmazon.comのような大規模なWebサイト、Facebook、mixiなどのソーシャルメディアでNoSQLが使用されていることも有名になってきました。

 RDBMSとNoSQLを意識して使い分ける時代が、本格的に到来しているのではないでしょうか。