「memcached」や「Apache Cassandra」、「Apache CouchDB」など、RDBMSとは異なる考えで設計してあるデータベース管理システムが普及しつつあります。この連載では、これら新しいデータベース管理システムの特徴と、RDBMSとの使い分け方について解説します。(編集部)
数年ほど前から、分散KVS(Key-Value Store)や列指向(Column-Oriented)データベース、ドキュメント指向(Document-Oriented)データベースなどの新しいデータベース技術が注目を集めています。これらの新しいデータベース技術は、リレーショナルデータベース管理システム(RDBMS)とは異なる考えに基づいているので、よく「NoSQL」データベース(注1)と総称されています。
注1:「NoSQL」という言葉はもともと「近年登場している、RDBMS以外の(つまりSQLを使わない)データベース」を総称、表現したものであり、その後から「SQLは不要だ」というイメージを持つキーワードのようになってきました。データベース開発者の中には、このようなRDBMSに対するネガティブなイメージを好まず、NoSQLを「Not Only SQL(SQLに限らない)」の略であるとすべき、と提唱している人もいます。
最近になってNoSQLデータベースの人気が急上昇してきた理由としては、NoSQLデータベースが、RDBMSにはない特長を持っているからです。例えば、NoSQLデータベースの中には安価なサーバを大量に並べ、並列処理をすることで処理性能の向上を可能にしたものも出てきました。
このようなニュースを見た人が、「もはやRDBMSの時代は終わった。これからはNoSQLデータベースの時代だ」とコメントすることも、最近は多くなってきました。
これまで長年RDBMSに慣れ親しんできた技術者の中には、いまだNoSQLデータベースに対する不安感や不信感をぬぐいきれない人もいるのではないでしょうか。筆者の周辺でもNoSQLデータベースについて「テーブルのジョインができないようだが、どうすればいいのか」「KVSは高速かもしれないがトランザクションがない。データの一貫性を保てないようなものは業務システムでは使えない」という意見をよく耳にします。しかし、それでもやはりNoSQLデータベースの存在は無視できなくなってきています。
今後、NoSQLデータベースが急速に普及して、RDBMSの時代は終わってしまうのでしょうか。筆者はそうは思いません。RDBMSとNoSQLデータベースは、それぞれ異なる特性を持っており、どのような処理をするかによって、得意不得意が分かれます。今でこそRDBMSの欠点を指摘する技術者が増えてきましたが、長年の運用実績や多くの技術者が蓄積してきたノウハウ、そしてどのようなシステムにも使える汎用性の高さなど、NoSQLデータベースでは到底及ばないメリットがたくさんあるのも事実です。
これまではRDBMS一本槍でシステムを作ってきましたが、今後は目的や用途に合わせて、RDBMSとNoSQLデータベースを上手に使い分ける時代になっていくでしょう。NoSQLデータベースを利用するときもRDBMSを利用したシステム開発で培った設計技術やチューニングの知識、運用ノウハウが無駄になることはありません。RDBMSであってもNoSQLであっても「目的のデータを素早く読み書きする」という、大きな目標は共通しています。RDBMSの知識はNoSQLデータベースを知る上でも大いに役立つことでしょう。
さて、さきほど「NoSQLデータベースは並列処理を行うことでパフォーマンスを向上させた」という例を紹介しました。このように、サーバの数を増やしていくことで処理性能の向上を狙う手法を「スケールアウト」と呼びます。後で詳しく説明しますが、RDBMSはスケールアウトで処理性能を向上させることが困難と言われています。RDBMSの処理性能を上げるにはサーバをより高性能なものに換える、あるいはメモリやプロセッサを増設することでサーバの性能を高める手法を使うのが一般的です。このようにサーバ単体の性能を向上させて、ソフトウェアの処理性能を上げる手法を「スケールアップ」と呼びます(図1)。
スケールアウトを採用すると、高価なハードウェアを導入する必要がないのでコストの面などでも有利なのではないかと考える方もいらっしゃるかもしれませんが、話はそう単純には行きません。スケールアウトで性能を上げるということは、すべてのサーバにソフトウェアをインストールしなければならないということです。使用するソフトウェアのライセンス体系によっては、スケールアップよりもスケールアウトの方が高くついてしまう場合もあります。
そして、スケールアウトでシステムを構築した場合、大量のサーバを管理しなければならないという点もあまりうれしい話ではありません。一方、スケールアップで済ませれば、1台のサーバを管理していればよいということになります。
しかし、スケールアップで性能を向上させようとすると、限界が来てしまいます。世の中にある最も高速なサーバを導入してしまったら、それ以上は技術革新が起こらない限り、性能が上がることはありません。一方、スケールアウトならば、上手に並列処理ができるようにプログラムを作ってあれば、サーバの台数を増やせば増やすほど性能が上がっていきます。
スケールアウトとスケールアップのどちらが良いか? これは、「どんな場合でもこちらの方が良い」と決められる問題ではありません。用途、目的を考えて使い分けるものです。近年まで、データベースといえばRDBMSが前提に考えられてきたことから、処理性能向上の選択肢は「スケールアップ」一本に限られていました。しかし、NoSQLデータベースの登場によって「スケールアウト」への道が開かれたのです。
Copyright © ITmedia, Inc. All Rights Reserved.