主要NoSQLの種類と特性を整理--分散DBMS「Cassandra」も解説

杉山貴章(オングス)
2011-12-27 12:44:00
  • このエントリーをはてなブックマークに追加

 クラウドが全盛を迎えた今、従来型のリレーショナルデータベース管理システム(RDBMS)と並んで「NoSQL」の存在が重要性を増している。

 今回は、NoSQLの一種として注目されているデータベースシステム「Apache Cassndra」を解説する。

NoSQLの種類

 そもそも「NoSQL」というのは「RDBMSではないデータベースシステム」という程度の緩い概念を表す用語なので、一言でNoSQLと言ってもその仕組みやデータ構造には様々な種類がある。

 代表的なNoSQLの種類を挙げてみよう。

KVS(Key-Value Store型)

 キーと値をペアにして保持するシンプルなデータ構造を持つ。キーと、格納したいデータを紐付け、キーを指定することでそれに対応したデータを格納/取得することができる。複数のストレージにデータを分散させて格納するKVSを特に「分散KVS」と呼び、データのレプリケーション(複製)や一貫性、冗長性を確保するための機能などを備えている。

列指向型(テーブル指向型)

 列方向のデータのまとまりを効率的に扱えるように設計されたデータベース。列データをファイルシステム上の連続した位置に格納することによって、大量の行に対する少数の列の集約処理や、同一の値をまとめるデータ圧縮などを効率的に行うことができる。大量のデータを対象とした分析やデータマイニングなどに特に適していると言われている。列指向データベースでは、キーやカラムなどのセットをデータを特定するための情報(キー)として利用するケースが多いため、広い意味ではKVSの一種とされることもある。

ドキュメント指向型

 XMLやJSONなどのように半構造化されたドキュメントデータの格納に特化したデータベース。ドキュメント自体に関するメタデータも含め、全てドキュメント内に保存される点が特徴となっている。

グラフ指向型

 ノード、エッジ、プロパティから構成されるグラフ構造でデータを格納するデータベース。データ同士の複雑な関連性を表現することができる。頻繁に更新される大量の非構造化データを効率良く扱えるというメリットがある。

Apache Cassandraとは

 Apache Cassandraは、オープンソースで開発されている分散データベース管理システムである。Amazon Dynamoがもつ分散ハッシュテーブルや、Google BigTableの列指向のデータモデルを取り入れて設計されており、上記の分類では列指向型に分類できる。

 Cassandraのデータモデルは、「キースペース」「カラムファミリー」「キー」「スーパーカラム」「カラム」の5つの要素から構成される。[キースペース]+[カラムファミリー]+[キー]+[カラム]または[キースペース]+[カラムファミリー]+[キー]+[スーパーカラム]+[カラム]が、データを特定するためのキーとして扱われる。

 Cassandraでは複数のノードで分散してデータを保持する。このノードの集まりのことを「クラスタ」と呼ぶ。Cassandraの場合、すべてのノードが同一の機能を持ち、1つのデータは複製されて同じクラスタ内の複数のノードに格納される。そのため、障害が発生した場合にデータが完全に失われるリスクを低く抑えられる。一方で、データの変更がクラスタ全体に同期されるまでの間、一時的にデータの一貫性が損なわれるという問題がある。

 クライアントは、クラスタのどのノードに対してもデータの書き込みや読み込みをリクエストすることができる。書き込みリクエストを受け取ったノードでは、トークンを計算してデータやその複製を保持するノードを決定する。読み込みリクエストについては、複数のノードに格納されたデータを照合することで一貫性を確保する。クライアントはリクエスト時に保証する一貫性のレベルを指定することができる。速度を優先する場合には一貫性が省略される。

主要なNoSQL達

 前述のように、NoSQLとは言ってもその特徴は様々であり、用途に応じて選択すべきデータベースシステムも変わってくる。例えばCassandraは大規模なシステムによる大量のデータ処理に優れる一方で、データ構造のシンプルさという点ではKVSタイプのデータベースにはかなわない。

 以下にオープンソースで提供されている主要なNoSQLの特徴をまとめた。データベースシステムを選択する際の参考にしていただきたい。

主要なNoSQL
データベースタイプ特徴ライセンス
HBase列指向Cassandraと同様にBigTableに触発されて開発された列指向型のデータベース。大規模分散処理フレームワークHadoopのHDFS(Hadoop Distributed File System)上で実行されるため、巨大なテーブルの扱いに長けている。Apache License 2.0
CouchDBドキュメント指向通信にHTTP/RESTを使用し、結果をJSONで返すため、JavaScriptなどからでも利用しやすい。Apache License, Version 2.0
MongoDBドキュメント指向BSONという独自の形式でドキュメントを表現する。複雑な階層構造を表現することが可能で、RDBMSと似た感覚でクエリやインデックスを扱うことができる。GNU AGPL v3.0(ただしドライバはApache License v2.0)
TokyoCabinet / TokyoTyrantKVSシンプルなデータ構造で高速なレスポンスを実現する。memcached互換のプロトコルが実装されているため、memcachedの代替として利用できる。LGPL
RedisKVSすべてのデータをメモリ上に保存するため処理が極めて高速。非同期でディスクに書き出すことで永続化にも対応する。BSDライセンス
Neo4jグラフ指向ACIDトランザクションに完全準拠している。多くの言語に対応し、エンタープライズ分野での採用実績が豊富。GPLv3
  • 新着記事
  • 特集
  • ブログ