NoSQL徹底研究の特集、今回は「Apache Cassandra」です。第1回でも紹介されているように、商用のリレーショナルデータベース(RDB)製品は汎用機やワークステーションに始まり、ウェブの登場とともにオープンソースのRDBも高価な商用RDBの代替として使われるようになったという歴史があります。
しかし、2000年代に入りインターネットがさらに普及し、ウェブやモバイルのユーザーが大量のデータを生み出すようになると、今までの考え方やシステムではユーザーの要求を満たすことができなくなり、AmazonやGoogle、Facebookのような先端企業は新しい手法を探り始めます。まさにそうした先端企業の競争力のニーズによって生まれたのがCassandraです。
Cassandraは、Amazon Web Servicesの「DynamoDB」という分散システムと、Googleの「BigTable」のデータモデルの考え方に基づいてFacebookが膨大なデータ、可用性とスケーラビリティを前提として作った分散システムです。2008年にオープンソースとして公開され、現在はApache Software Foundationのプロジェクトの1つとして運営されています。
分散データベースであるCassandraは、分散を前提とするシステムであるがゆえのさまざまな特長を備えています。そしてその特長ゆえに、RDBとは大きく異なります。まずは、RDBとCassandraとの違いという側面から見ていきましょう。
RDBとNoSQLの違いから見たCassandra
一般的な特長からみたRDBとCassandraの違いは以下の通りです。
データモデル:RDBはあまり柔軟性のないデータモデルで構造化されたデータを扱うのに対し、Cassandraは今日のアジャイルな開発手法に適した、より柔軟なデータモデルでデータを扱います。ただし、構造化されたデータは扱わないということではない点に注意してください。特にCassandraではRDBと同じような“テーブル”などの概念があります。
アーキテクチャ:一般的にRDBは一元管理型のスケールアップを前提としたマスタのあるアーキテクチャであるのに対し、Cassandraは分散型のスケールアウトを前提としたマスタのないアーキテクチャになります。マスタのないアーキテクチャは、マスタの切り替え作業やマスタに処理が集中するといったことが発生しないので、可用性に優れていて、拡張を容易にするという大きな特徴があります。
データ分散:一般的なRDBでは、そのマスタのあるアーキテクチャゆえに、データを分散する場合には、読み取り専用の複製をフェイルオーバー先となるコンピュータのディスクに配置します。それに対し、Cassandraは、データベースクラスタを構成する各ノードのディスクにデータを均等に分散し、すべてのノードで書き込みと読み取りを受け付けます。また、RDBでは、地理的に離れたアベイラビリティゾーンやデータセンター間でのレプリケーションが一筋縄ではいかないのに対し、Cassandraは最初からその想定で設計されています。
可用性:RDBでは一般的にマスタが他のマシンにフェイルオーバーする方式により可用性を維持しますが、Cassandraはマスタのない設計によりダウンタイムのない可用性を維持します。
スケーラビリティとパフォーマンス:RDBでは、CPUやメモリ、ディスクなどを中央サーバに追加することでスケールアップしますが、Cassandraはノードを追加することでスケールアウトし、パフォーマンスをリニアに向上できます。例えば、2台のノードで1秒あたり10万件処理できるとしたら、2台追加すれば2倍の20万件、6台追加して4倍の40万件というようにリニアにスケールします。
Cassandraの利点
以下のいずれにも当てはまるのであれば、従来のRDBでも十分に役目を果たします。無理にRDBから移行する必要もありませんし、RDBのアプローチでシステムを組み立てるのであれば、RDBを使う方がお勧めです。
- ダウンタイムを許容できる可用性でよい、あるいは100%のアップタイムを得るためにコストと手間を惜しまない
- スケーラビリティはさほど重要でない、あるいはスケーラビリティを得るためにコストと手間を惜しまない
- 膨大な量のデータの取り込みにパフォーマンスを問わない
- データの一貫性を絶対的に必要とする
しかし、一貫性の点を除き、これらの条件は今までのシステム構築の上で、各企業が仕方なく受け入れてきた事実でしかありません。Cassandraはその考えを大きく変えることが可能です。
冒頭にも書いたようなインターネット先端企業の要請から生まれたデータベースではありますが、あらゆる人やモノがインターネットに接続し、膨大な量のデータがひっきりなしにやり取りされる今の世界にあっては、このようなデータベースがあらゆる企業にとって必須となります。時代にマッチしたオンラインアプリケーションの開発と管理に寄与するCassandraの主要な機能を以下に示します。
大規模にスケーラブル:Cassandraは、すべてのノードが等価であるマスタレスの設計です。どのノードも同じように扱えるため、運用もシンプルでスケールアウトも容易です。
すべてがアクティブとして動作: Cassandraノードはどれも書き込みと読み取りの両方を受け付けます。
リニアにスケールするパフォーマンス:データベースをオンラインにしたままノードを追加することで、予測可能な形でパフォーマンスを向上させることができます。例えば、2台のノードで毎秒20万のトランザクションを処理できていれば、4台で40万、8台で80万のトランザクションを処理できます。また、その逆の、オンラインでスケールダウンすることも容易に可能です。