連載
» 2011年03月25日 00時00分 公開

RDB開発者におくるNoSQLの常識(2):NoSQLデータベースを使い始める前に (1/3)

前回はNoSQLデータベースとRDBMSの設計思想の違いを解説しました。今回は、それを踏まえてNoSQLデータベースでデータベースを設計するときに覚えておきたいポイントを解説します。(編集部)

[渡辺俊史,株式会社システムインテグレータ]

NoSQLデータベース設計のセオリーとは?

 前回は、NoSQLデータベースが登場してきた背景や、リレーショナルデータベース管理システム(RDBMS)との違いを解説し、いくつかの代表的なNoSQLデータベース製品を紹介しました。長年、データ管理の分野で主役を担ってきたRDBMSはデータ一貫性を強く保持する仕組みを備えていましたが、半面その特徴ゆえにネットワーク上の複数のサーバにデータを分散すると(分散環境)十分に性能を発揮できず、スケールアウトによる性能向上が困難であるという弱点を持っています。

 分散環境において高い性能を発揮するNoSQLデータベースの世界では、一体どのような考え方でデータベースを設計するのが有効なのでしょうか。今回は、NoSQLデータベースを設計する際に考慮すべきポイントを整理していきます。

RDBMSを深く知ることがNoSQLを知ることにつながる

 前回、「RDBMSはデータの一貫性を保証しなければならないため、スケールアウトで処理性能を上げることが難しい」と説明しました。皆さんはRDBMSがどのようにしてデータの一貫性を保っているのかを考えたことはあるでしょうか。RDBMSからデータを読み書きするときは、データファイルを操作するようなプログラムを作る必要はなく、図1のようにほとんどの場合、SQLのような「問い合わせ言語」を利用して間接的にデータにアクセスします。

図1 RDBMSでは、問い合わせ文を使うことで好きなデータを引き出せる 図1 RDBMSでは、問い合わせ文を使うことで好きなデータを引き出せる

 ファイルシステムとのやりとりや入出力のストリーム処理、ロックの確保と解放など、面倒なことはすべてRDBMSが処理してくれるので、RDBMSがどのようにデータを扱うのか深く意識したことのない人もいるでしょう。NoSQLデータベースの話題に入る前に、RDBMSがデータをどのように管理、提供しているのかという基本的な仕組みについて、あらためて考えてみましょう。

 ここで「なぜNoSQLのことを知るために、いまさらRDBMSの復習なんかしなしなければならないんだ?」と思う人がいるかもしれません。しかし待ってください。RDBMSがスケールアウトに向かないのは、RDBMSの考え方や設計方法論が間違っているからではないのです。NoSQLデータベースを考えるうえでも、RDBMSの設計方法論が無駄になることはありません。むしろ、RDBMSをよく学ぶことで、NoSQLデータベースについて考える重要なヒントが見えてきます。

便利だが、開発者に見えない部分が多いRDBMS

 図2を見てください。RDBMSに対するデータの書き込み・読み取りの手順を簡潔に表したものです。RDBMSを使ってデータを格納するには、行と列からなるデータ構造(テーブル)を事前に用意しておく必要があります(図中a)。データベースにデータを無駄なく格納するためにテーブル群の関係を整理することを「正規化」と呼ぶことはご存じの方も多いでしょう。データベースの正規化はRDB設計者にとっては必須のスキルです。すでに学習されているかたも少なくないかと思います。正規化は本稿の主題ではないので、詳しい解説は他の記事に譲ります。

図2 RDBMSにおけるデータ読み書きの順序 図2 RDBMSにおけるデータ読み書きの順序

 テーブルへのデータ書き込み要求は、RDBMSが備える同時実行制御機構(ACIDトランザクション)が受け取り、順序を整理します。その後、RDBMSは順序通りにデータをテーブルに書き込みます(図中b)。今日、技術の進歩に伴ってディスクストレージの読み書き速度は大きく向上しましたが、RDBMSが登場したばかりのころ、ディスクへの読み書きには今よりもずっと長い時間がかかるものでした。データベースのデータ更新を素早く処理するには、テーブルを正規化してデータベースが格納するデータの総データサイズや更新データの書き込み量などを最小化することに大きな意味がありました。

 データを読み取るときについても考えてみましょう。RDBMSはクエリ(問い合わせ)の内容に合わせて、関係演算(選択、射影、結合)の結果得られるデータを、テーブルから取り出します。RDBMSはテーブルから取り出したデータをそのまま返すこともありますが、さらに導出項目の計算や集計、並べ替えなどの処理をして、結果セットとしてクライアントにデータを返します(図中c)。

 最近のRDBMSは高速なメモリキャッシュを活用し、ディスクアクセスをできるだけ減らすなどの工夫を施してあるものがほとんどですが、ここで留意してもらいたいのは「結果セットは、原則として問い合わせに応じて、RDBMSが動的に生成する」ということです。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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