NoSQLを選ぶ理由

~データベースステータスの現状と3つのトレンド~

インタラクティブ(双方向性)なアプリケーションは過去15年で飛躍的に成長しました。それに伴い、データマネージメントへのニーズも高まってきています。そして、ビッグデータ、大規模ユーザ、そしてクラウドコンピューティングへの関心は、NoSQLの技術を躍進させる要因となっています。また、NoSQLはRDBを代替するデータベースとしての役割を確立しつつあります。開発においてもスケールアウトや、柔軟なデータモデルはNoSQLの強みを生かせる分野として注目を集めています。

ビッグユーザ

つい最近までアプリケーションの世界において1千ユーザ数は多いとされ、1万ユーザ数にもなれば非常に多いという認識でした。今ではグローバルに展開されるユーザのインターネット使用頻度とサイト内滞在時間の増加、そしてスマートフォンなどのタブレットの普及でユーザ数が100万に達することも珍しくない時代となってきました。

多くのユーザからの同時アクセスをサポートすることは非常に重要ですが、アプリケーションがどのように使われるかを予測することは難しいために、ユーザ数の増減が激しいケースには、更にサポートも臨機応変に対応する必要があります。具体的な例として、下記のようなケースが考えられます。

  • 新規立ち上げのアプリケーションの場合、ユーザ数が一夜にして100万に増えることも稀ではありません
  • ユーザの中にはアプリケーションの使用頻度も少なくすぐに離脱するユーザがいる一方で、頻繁にアプリケーションを使うユーザもいます
  • 一時的なユーザ数増加の要因として、季節やイベント(ex. クリスマス、バレンタイン、etc)などが挙げられます

アクティビティが活発なユーザは、行動パターンも多岐に渡るため、それに応じて簡単にスケール出来るデータベースが必要です。RDBでは困難、または不可能とされるダイナミックなスケラビリティーや、アクティビティが活発なユーザのニーズに応えるための安定したパフォーマンスの維持は、NoSQLを用いて実現が可能となります。

ビッグデータ

開発者は、新しいデータを追加の際にデータベース定義の変更が不要で、データの融合が容易である柔軟なデータベースを求めています。最近、追加となるデータは構造が不規則なものが多いため、それに適したデータベースが必要となります。残念ながら、スキーマが固定されている従来のRDBの構造は、新規のデータを素早く組込む作業や、構造が不規則なデータの管理には不向きです。CouchbaseはRDBでは補うことが難しいデータモデルに対して解決策をご提案します。

クラウドコンピューティング

現在普及しているアプリケーション(コンシューマとビジネス共に)の多くは、インターネットの三層構造(1.Webブラウザ等のプレゼンテーション層、2.アプリケーション層のアプリケーションサーバ、3.物理層のデータベース)を利用したパブリックまたはプライベートのクラウド上で運用され、多数のユーザをサポートしています。

三層構造に於いて、アプリケーションはウェブブラウザまたはモバイルアプリケーションからアクセスされます。クラウド上では、外部からの通信に対してロードバランサーが、アプリケーションサーバをスケールアウトする為の階層として働きます。このアプリケーション層のスケールアウトは、新たにサーバを追加し負荷を軽減させることで実現します。

物理層において、集中管理型でスケールアップモデルなRDBの選択がこれまでは一般的でした。しかし、スケールアップでは困難な、簡単でダイナミックなスケーラビリティのニーズが高まっています。NoSQLデータベースは積み上げ方式による分散型のデータベースであるために、インターネット構造の三層構造に適していると言えます。

何故NoSQLは必要とされているのか?

柔軟なデータモデル

RDBとNoSQLは根本的に全く異なるデータベースです。RDBは、データを行と列で構成された複数のテーブルに振り分けます。テーブルはカラムに格納されている外部キーによって結合されます。データの読込みの際、対象データは時には数百単位のテーブルから参照されアプリケーションに提供される前に必要な情報同士が結合されます。書込み動作も同様に多くのテーブルによって処理が行われます。

NoSQLデータベースでは、テーブルで管理するRDBと異なり、JSONのフォーマットを用いたドキュメント型のデータベースとなります。各ドキュメントはアプリケーションのオブジェクトとなります。例えば、RDBでは20にも及ぶテーブルに保存されているデータがJSONドキュメントでは一つのドキュメント/オブジェクトにまとめられてしまうかもしれません。データの集合体の処理は、重複した情報へ導かれる可能性もありますが、NoSQLの格納処理能力は限定的でないため、データモデルも柔軟性を保つことが可能です。そのため、読込み/書込みのパフォーマンスも向上し、ウェブのアプリケーションにおいてデータのやりとりを容易にすることを実現します。

もう1つの大きな違いとして、RDBはスキーマの柔軟性が欠けているのに対し、NoSQLはスキーマを必要としないモデルとなっています。RDBはデータの格納の際、堅固な定義付けを要求しています。そのため、一度データが格納されるとスキーマの変更は非常に手間となります。ビッグデータの活用が求められる今日において、高速かつリアルタイムでデータの追加が可能なアプリケーションは必須であり、RDBのような特性を持つデータベースはユーザのニーズに100%応えることが難しくなってきています。

ドキュメント型データベースはスキーマを必要とせず、データベースを構築する始めの段階やその途中でも新たにフィールドの追加を自在に行うことが可能です。また、データフォーマットの変更はアプリケーションに障害をきたすことなく行えます。

スケーラビリティとパフォーマンスの優位性

ビッグデータの活用と大規模ユーザのニーズに応えるには、アプリケーションとそれを構築するデータベースを次の2つの方法のうちいずれかで検討する必要があります。1つ目は既存のサーバの機能(ex. メモリ、CPU、etc)を向上するというスケールアップの方法が挙げられます。2つ目は、サーバの台数を増やすことで各サーバの負荷を分散し肥大する情報量とその処理に対応するスケールアウトの方法です。

スケールアップに伴うRDBの限界

ウェブのアプリケーションの場合、スケールアウトの手法が長年採用されており、特に大きな問題もありませんでした。近年、多くのユーザによるアプリケーションの使用が活発になってきたことから、ユーザ増加に併せてサーバ数を追加すればよく、ユーザ増加に比例しただけのコスト増に抑えられることとなりました。

NoSQLデータベースが普及する以前は、スケールアップの手法によって増加するデータに対応していました。これは、集中、共有というRDBの特性に基づいています。しかし、サーバの機能(CPU、メモリ、ディスク容量など)を大きくするなどの処置は、実態に見合わない可能性もあります。大きなサーバは性能が高い反面、運用が非常に難しくコストも大きくかかります。

データベースにおけるNoSQLのスケールアウト

NoSQLは分散型のデータベースで構成され、スケールアウトによって拡張されます。 汎用サーバで構成されたクラスタでデータ格納を行い、データベースの運営が行われます。データベースの拡張の際は、新たに追加されたサーバがクラスタに加わり、データとデータベースのオペレーションは大きくなったクラスタ内に分散配置されます。NoSQLデータベースでは、汎用サーバに障害が発生することを前提に耐用性および弾力性に優れ、万が一故障が発生した場合でも速やかに正常な状態へ復旧できるように構築されてます。

NoSQLデータベースは、例え新たに1万ユーザがアプリケーションを使い始めても、クラスタにサーバを追加するだけでスケールできます。更に1万ユーザが増加され、サーバが追加された場合でも、アプリケーションは分散配置されたデータベースを個々にアクセスするため、アプリケーションの修正をする必要がなくスケールアウトすることが可能です。

大規模RDBを使用する場合は、大規模な、そして複雑なフォールトトレラントサーバを使用しなければならず、デザイン、サポートを含むサーバの価格やRDBのライセンス費用等にどうしても金額がかかってしまいます。それに対し、スケールアウトに際してNoSQLデータベースは一般にオープンソースであり、使われる汎用サーバやクラスタの運用にかかる金額が比較的安価であるのが特徴的です。

RDBとNoSQLデータベースの実装は異なりますが、NoSQLデータベース は、パフォーマンスやスケーリングにおいて、RDBの特性を融合したNoSQLデータベースとなります。

  • 自動シャーディング – NoSQLデータベースは、アプリケーションの稼動停止をすることなくデータを自動的に各サーバへ分散配置させます。またサーバの追加や削除の際に、アプリケーションのダウンタイムがなくデータの書込み/読込み動作を自動的に各サーバへ行うことが可能です。ほとんどのNoSQLデータベースの場合、データのレプリカや複数のコピーを各クラスタに格納し、システム障害の際にもデータが消失しないようにしています。Couchbase Server は24時間365日休まずオンラインで稼動しています。
  • 分散されたクエリ – RDBではデータ処理がより複雑なため、シャーディングの過程で稀にパフォーマンスの減退を招く可能性があります。NoSQLデータベースは、数百のサーバへの分散配置においても安定したパフォーマンスを発揮することが可能です。
  • 独立したキャッシュ群 – NoSQLデータベースは、レイテンシを抑えスループットを高速化するために、データをメモリに透過的に格納します。通常、RDMのキャッシング階層はインフラストラクチャー階層から分離した階層として運用チームによって管理された別のサーバー上で、開発、展開されなければなりません。NoSQLデータベースの独立したキャッシュ群は、アプリケーション開発者と運用チームを意識する事が無いもので、RDBとは対照的な技術です。