NoSQL データベースは、スケーラブルなパフォーマンスとスキーマレスなデータモデル向けに最適化された非リレーショナルデータベースです。また、NoSQL データベースは、その開発しやすさ、低レイテンシー、耐障害性のゆえに広く認められています。NoSQL データベースでは、列指向、ドキュメント、グラフ、メモリ内キー値ストアなど、さまざまなデータモデルを使用します。このページには、NoSQL データベースの使用を開始する際に役立つリソースが含まれています。
NoSQL データベースシステムでは、メモリ内キー値ストア、グラフデータモデル、ドキュメントストアなど、さまざまなデータ管理モデルを使用します。このようなタイプのデータベースは、従来のリレーショナルデータベースのデータ一貫性の制限の一部を緩和することで達成される、大容量のデータボリューム、低レイテンシー、柔軟なデータモデルを必要とするアプリケーション向けに最適化されています。
NoSQL データベースは、従来のリレーショナルデータベースよりも大規模で高速な応答を必要とするビッグデータ、モバイル、ウェブのアプリケーションの多くに非常に適しています。単純なデータ構造と水平スケーリングのため、NoSQL データベースは通常、リレーショナルデータベースより速く応答し、スケールも容易です。
リレーショナルデータベース管理システム (RDBMS) と非リレーショナル (NoSQL) データベースにはそれぞれ異なる長所と短所があります。RDBMS では、データは柔軟にクエリできますが、クエリは比較的高コストで、トラフィックが多い状況ではスケールがうまくいかない場合があります。一方、NoSQL データベースでは、データは限られた数の方法で効率的にクエリできますが、その範囲外では、クエリは高コストで低速になりがちです。
| リレーショナルデータベース | NoSQL データベース | |
| データモデル | リレーショナルモデルでは、データを行と列で構成されるテーブルに正規化します。テーブル、行、列、インデックス、テーブル間の関係などのデータベース要素は、スキーマによって厳密に定義されます。 | NoSQL データベースは、通常、スキーマを必要としません。値、列セット、半構造化 JSON、XML、または関連する項目属性を含むその他のドキュメントの取得には、通常、パーティションキーが使用されます。 |
| ACID プロパティ | 従来の RDBMS では、リレーショナルデータベースの ACID プロパティ (アトミック性、一貫性、独立性、耐久性) がサポートされています。アトミック性は、「全部かゼロか」、つまり、トランザクションが完全に実行されるか一切実行されないかのどちらかとなることを指します。一貫性は、いったんトランザクションが実行されたら、データが必ずデータベーススキーマに従うことを指します。独立性は、同時発生したトランザクションが相互に独立して実行されることを指します。耐久性は、予期しないシステム障害や停電が発生しても、異常発生前の最後の状態まで復旧できることを指します。 | NoSQL データベースでは、従来の RDBMS の ACID プロパティの一部を、水平方向にスケールする、より柔軟なデータモデルに切り替える場合がよくあります。したがって、NoSQL データベースは、従来の RDBMS でアーキテクチャ上の課題が生じた場合に、パフォーマンスのボトルネック、スケーラビリティ、運用の複雑さ、管理コストとサポートコストの上昇といった問題を解消するのに最適な選択肢です。 |
| パフォーマンス | パフォーマンスは通常、ディスクサブシステムに左右されます。最善のパフォーマンスを実現するには、クエリ、インデックス、テーブル構造の最適化が必要です。 | パフォーマンスは通常、基盤となるハードウェアクラスタのサイズ、ネットワークレイテンシー、呼び出すアプリケーションに依存します。 |
| 拡張性 | 高速なハードウェアを使用することで、簡単にスケールアップできます。リレーショナルテーブルを分散システムで使用するには追加の投資が必要になります。 | 低コストなハードウェアの分散クラスターを使用してスケールアウトすることで、レイテンシーを増やすことなくスループットを向上できるように設計されています。 |
| API | データの保存および取得のリクエストは、構造化クエリ言語 (SQL) 準拠のクエリを使用して伝えられます。これらのクエリは、RDBMS によって解析され、実行されます。 | アプリケーション開発者は、オブジェクトベースの API を使用して、メモリ内のデータ構造の保存および取得を簡単に行うことができます。アプリケーションはパーティションキーによって、キーと値のペア、列セット、またはアプリケーションのシリアライズされたオブジェクトや属性を含む半構造化ドキュメントを調べます。 |
| ツール | SQL データベースでは通常、データベース指向のアプリケーションの開発を簡素化するために、一連の豊富なツールが提供されます。 | NoSQL データベースでは通常、クラスターおよびスケーリングの管理ツールが提供されます。基盤となるデータへのプライマリインターフェイスはアプリケーションです。 |
NoSQL データベースには、列指向、ドキュメント、グラフ、メモリ内キー値ストアという 4 つのタイプがあります。これらのデータベースは、一般的に、データの保存、アクセス、構造化の方法が異なっており、さまざまなユースケースやアプリケーションに合わせて最適化されています。
- 列指向データベースは、データ行ではなく、データ列の読み書きに最適化されています。データベーステーブルの列指向ストレージは、必要な総ディスク I/O と、ディスクからロードする必要のあるデータ量が大幅に減少することから、分析クエリのパフォーマンスにおいて重要な要因となっています。
- ドキュメントデータベースでは、半構造化データをドキュメントとして保存できます。通常は、JSON フォーマットまたは XML フォーマットで保存されます。従来のリレーショナルデータベースとは異なり、それぞれの NoSQL ドキュメントのスキーマは一定ではなく、アプリケーションデータを柔軟に整理、保存でき、他の機能を使用する際に必要なストレージを減らすことができます。
- グラフデータベースには頂点と、辺と呼ばれる有向リンクが保存されます。グラフデータベースは、SQL と NoSQL の両方のデータベースで構築できます。頂点と辺にはそれぞれ関連するプロパティがあります。
- メモリ内キー値ストアは NoSQL データベースであり、読み取りの負荷が大きいアプリケーションワークロード (ソーシャルネットワーキング、ゲーム、メディアの共有、Q&A ポータルなど) や計算量の多いワークロード (レコメンデーションエンジンなど) に最適化されています。メモリ内キャッシュは、アクセスのレイテンシーを低くするためにデータの重要な部分をメモリ内に保存することで、アプリケーションのパフォーマンスを向上させます。
| SQL |
MongoDB (NoSQL) | DynamoDB (NoSQL) | Cassandra (NoSQL) | Couchbase (NoSQL) |
| テーブル | コレクション | テーブル | テーブル | データバケット |
| 行 | ドキュメント |
項目 | 行 | ドキュメント |
| 列 |
フィールド | 属性 | 列 | フィールド |
| プライマリキー |
ObjectId |
プライマリキー | プライマリキー | ドキュメント ID |
| インデックス | インデックス | セカンダリインデックス | インデックス |
インデックス |
| 表示 | 表示 | グローバルセカンダリインデックス | マテリアライズドビュー | 表示 |
| ネストされたテーブルまたはオブジェクト |
埋め込まれたドキュメント | マップ | マップ | マップ |
| 配列 |
配列 | リスト | リスト | リスト |
Amazon DynamoDB は簡単に使用開始できます。入門ガイドを使用すると、わずか数回のクリックで最初の DynamoDB テーブルを作成できます。
また、RDBMS から Amazon DynamoDB へ移行するためのベストプラクティスのホワイトペーパーをダウンロードして、RDBMS から DynamoDB にワークロードを移行するためのベストプラクティスを学習できます。

