NoSQL vs リレーショナル・データベース
NoSQLとリレーショナル・データベース(SQLなど)は、異なるアプリケーション要件をサポートしています。そのため企業内では、双方を採用し、それぞれに異なるユースケースをサポートさせることがよくあります。どちらをどのアプリケーションで採用するか、主な技術的判断基準としては以下のようなものがあります。
リレーショナル・データベース | NoSQL | |
---|---|---|
ユースケース | 中央集中型、モノリシック・アプリケーション | 分散型(高スケーラブル)、マイクロサービス・アプリケーション |
可用性 | 中位から高位までの可用性 | 継続性、ゼロ・ダウンタイム |
速度 | 中速データ | 高速データ(デバイス、センサーなど) |
データ・タイプ | 主として構造化データ | 構造化、準構造化、非構造化データ |
トランザクション | 複雑/構造化されたトランザクションとジョイン | シンプルなトランザクションとクエリ |
読み取り+書き込み | 読み取りのスケーリング | 書き込み、読み取り双方のスケーリング |
スケーラビリティ | スケールアップ (`別名:垂直スケーラビリティ) | スケールアウト(別名:水平スケーラビリティ) |
さまざまなタイプのNoSQLデータベース
また、NoSQLにはいくつかのデータベース・タイプがあり、データや目的に応じて最適なものを柔軟に選択することが可能です。主なタイプは以下の通りです。
キー・バリュー型データベース
キー・バリュー型データベースは、NoSQLデータベースの中でも最も複雑度の低いデータベースであり、すべてのデータがインデックス付きのキーと値(バリュー)で構成されています。キーはハッシング・メカニズムによって作成され、そのキーを使ってデータベースは関連する値を素早く取得することができるのです。ハッシング・メカニズムにより、データへの定常的なアクセス、大規模なデータベース・システムでの高いパフォーマンスの維持が可能になります。キーはどのようなタイプのオブジェクトでも作成できますが、通常は文字列です。値は一般に不透明なブロブ(データベースが解釈できないバイト列)となっています。これにより、大量のデータの保存や、検索クエリーの実行が容易になります。
データベース例
- Redis
- Amazon DynamoDB
- Riak
- Oracle NoSQL
Cassandraのような表形式のNoSQLデータベースは、キー・バリュー型のニーズにも応えることができます。
ドキュメント型データベース
ドキュメント型データベースは、キー・バリュー型の基本的な考え方を発展させたもので、「ドキュメント(文書)」がデータを含み、各ドキュメントには一意のキーが割り当てられ、データベースはそのキーを使ってドキュメントを検索します。このデータベースは、ドキュメント指向の情報を保存、検索、管理するために設計されており、情報のほとんどがJSON (JavaScript Object Notation) として保存されます。各文書はさまざまな種類のデータを含むことができます。ドキュメントをグループ化したものはコレクションと呼ばれ、コレクション内の各文書は異なる構造を持つことができます。
ドキュメント型データベースは、ドキュメントに含まれるコンテンツを調査することができるため、検索処理の追加が可能です。静的なスキーマを必要とするリレーショナル・データベースとは異なり、ドキュメント型データベースは、ドキュメントのコンテンツによって定義される、柔軟、動的なスキーマを利用することができます。
データベース例
- MongoDB
- CouchDB
注:ドキュメント型に特化したデータベース以外のリレーショナル・データベースやNoSQLデータベースにも、Cassandraなど、JSONドキュメントの保存とクエリーが可能なものがあります。
テーブル型データベース
テーブル型データベースは、行と列でデータを整理するデータベースですが、従来のリレーショナル・データベースとは一味違います。ワイド・カラム・ストアや、パーティションド・ロー・ストアとも呼ばれ、関連する行(row) をパーティションで整理し、同じレプリカにまとめて格納することで、高速な検索を可能にします。
リレーショナル・データベースとは異なり、表の形式は厳密ではありません。たとえば、Apache Cassandra™の場合、すべての行がテーブルのすべての列の値を含んでいる必要はありません。キー・バリュー型データベースや、ドキュメント型データベースと同様に、テーブル型データベースは、テーブルから行を取得する際にハッシュのメカニズムを使用します。
データベース例
- Cassandra
- HBase
- Google Bigtable
グラフ型データベース
グラフ型データベースは、データ間の関係を、グラフの形で保存します。グラフのノードはデータ項目を表し、エッジはデータ項目間の関係を表します。グラフ型データベースは、複雑な結びつきの強いデータ向けに設計されており、リレーショナル・データベースの関係性や結合性をはるかに超える能力を有しています。グラフ型データベースは、大規模なデータセットの中から共通点や異常値を見つけ出すことに優れています。
データベース例
- DataStax Graph
- Neo4J
- JanusGraph
- Amazon Neptune