それではなぜ、NoSQLではスケールアウトが実現できて、RDBMSではスケールアウトが難しいのでしょうか。
現在主流となっているWebベースのサービスやシステムを見ると、図2のように複数のサーバを、階層構造にして配置するスタイル(階層型モデル)で構築するのが一般的です。階層型モデルのシステムで性能向上を狙うときは、先に述べたスケールアップとスケールアウトの2種類の方法があります。
Webサーバやアプリケーションサーバはスケールアウトで比較的簡単に性能を上げることができます。処理性能が向上するだけでなく、処理を複数台のサーバに分散することで可用性の向上も期待できます。
一方、データベースサーバはデータベースを利用してシステム全体のデータ一貫性を保証する役割を担っています。ここで、並列処理のために複数のサーバへデータを分散させてしまうと、全体の整合性を確保するのが難しくなるのです。特に、アプリケーション全体で利用するマスタデータは1カ所(単一のデータベース)で管理するのが原則です。また、仮にマスタデータの整合性問題を解決できたとしても、複数のサーバにデータを配置していると、読み取り時にテーブルを結合する処理の性能も低下してしまいます。
このように、階層モデルのシステムで処理性能を向上させるためにスケールアウトの手法を採ろうとしても、RDBMSを使っているとデータベースサーバがボトルネックになってしまうことがあるのです。
RDBMSを使うと、データベースサーバの分散が困難になるため、処理性能を向上させたいときはスケールアップで対応するのが一般的でした、しかし、近年になってSNSやソーシャルゲームなどのBtoC向けWebサイトが増えてきました。このようなWebサイトでは企業向けシステムでは考えられないほど爆発的な数のアクセスがやってきます。そこで、大量のアクセスに耐えうるデータベース管理システムを求める声が高くなってきました。
また、ある程度アクセス数が予測できるBtoB向けシステムの世界でも、サーバの性能や台数を可変のリソースとして柔軟に変更したいという要求が強まっています。
以上に挙げた問題を解決するため、これまでRDBMSの長所とされてきた汎用性や、強い一貫性保持の仕組みを一部犠牲にして生まれた、目的特化型の新しいデータベースシステムがNoSQLデータベースなのです。
Copyright © ITmedia, Inc. All Rights Reserved.