NoSQL は、高性能の非リレーショナルデータベースを指す用語です。NoSQL データベースは、ドキュメント、グラフ、キー値、列指向など各種データモデルを利用します。NoSQL データベースは、開発のしやすさ、スケーラブルなパフォーマンス、優れた可用性、高い回復性で知られています。NoSQL データベースの使用を開始する際には、次の動画が役立ちます。
ホワイトペーパー Migration Best Practices – RDBMS to Amazon DynamoDB をダウンロードしてください。
| リレーショナルデータベース | NoSQL データベース | |
| データモデル | リレーショナルモデルは、データを行と列から成るテーブルと呼ばれる表形式の構造に正規化します。テーブル、列、インデックス、テーブル間の関係などのデータベース要素は、スキーマによって厳密に定義されます。 | 非リレーショナル (NoSQL) データベースは、通常、スキーマを必要としません。値、列セット、半構造化 JSON、XML、または関連する項目属性を含むその他のドキュメントの取得には、通常パーティションキーが使用されます。 |
| ACID プロパティ | 従来のリレーショナルデータベース管理システム (RDBMS) は、ACID (不可分性、一貫性、独立性、永続性) で定義された一連のプロパティをサポートしています。不可分性は、「全部かゼロか」、つまり、トランザクションが完全に実行されるか一切実行されないかのどちらかとなることを指します。一貫性は、いったんトランザクションが実行されたら、データが必ずデータベーススキーマに従うことを指します。独立性は、同時発生したトランザクションが相互に独立して実行されることを指します。永続性は、予期しないシステム障害や停電が発生しても、異常発生前の最後の状態まで復旧できることを指します。 | NoSQL データベースは、従来のリレーショナルデータベース管理システム(RDBMS)の ACID プロパティを完全には保証しないものの、水平方向に拡張できるより柔軟なデータモデルを実現します。したがって、従来の RDBMS でアーキテクチャ上の課題が生じた場合に、パフォーマンスのボトルネック、スケーラビリティ、複雑な運用、管理コストとサポートコストの上昇といった問題を解消するのに最適な選択肢です。 |
| パフォーマンス | パフォーマンスは通常、ディスクサブシステムに左右されます。最善のパフォーマンスを実現するには、クエリ、インデックス、テーブル構造の最適化が必要です。 | パフォーマンスは通常、基盤となるハードウェアクラスタのサイズ、ネットワークレイテンシー、呼び出すアプリケーションに依存します。 |
| 拡張性 | 高速なハードウェアを使用することで、簡単にスケール "アップ" できます。リレーショナルテーブルを分散システムで使用するには追加の投資が必要になります。 | 低コストなハードウェアの分散クラスタを使用してスケール "アウト" することで、レイテンシーを増やすことなくスループットプットを改善できるように設計されています。 |
| API | データの保存および取得要求は、構造化クエリ言語 (SQL) 準拠のクエリを使用して伝えられます。このクエリは、リレーショナルデータベース管理システム (RDBMS) によって解析され、実行されます。 | アプリケーション開発者は、オブジェクトベースの API を使用して、メモリ内のデータ構造の保存および取得を簡単に行うことができます。アプリケーションはパーティションキーによって、キーと値のペア、列セット、またはアプリケーションのシリアライズされたオブジェクトや属性を含む半構造化ドキュメントを調べます。 |
| ツール | SQL データベースでは通常、データベース指向のアプリケーションの開発を簡素化するために、一連の豊富なツールが提供されます。 | NoSQL データベースでは通常、クラスターおよびスケーリングの管理ツールが提供されます。基盤となるデータへのプライマリインターフェイスはアプリケーションです。 |
ドキュメントデータベース
ドキュメントデータベースでは、半構造化データをドキュメントとして保存できます。通常は、JSON フォーマットまたは XML フォーマットで保存されます。従来のリレーショナルデータベースとは異なり、それぞれの非リレーショナル (NoSQL) ドキュメントのスキーマは一定ではなく、アプリケーションデータを柔軟に整理、保存でき、他の機能を使用する際に必要なストレージを減らすことができます。詳細 »
メモリ内キー値ストア
メモリ内キー値ストアは NoSQL データベースであり、読み取りの負荷が大きいアプリケーションワークロード(ソーシャルネットワーク、ゲーム、メディアの共有、Q&A ポータルなど)や計算量の多いワークロード(レコメンデーションエンジンなど)に最適化されています。メモリ内キャッシュは、アクセスの待ち時間を短くするためにメモリ内にデータの重要な部分を格納することにより、アプリケーションのパフォーマンスを向上させます。詳細 »
| SQL |
MongoDB | DynamoDB | Cassandra | Couchbase |
| テーブル | コレクション | テーブル | テーブル | データバケット |
| 行 | ドキュメント |
項目 | 行 | ドキュメント |
| 列 |
フィールド | 属性 | 列 | フィールド |
| プライマリキー |
ObjectId |
プライマリキー | プライマリキー | ドキュメント ID |
| インデックス | インデックス | セカンダリインデックス | インデックス |
インデックス |
| 表示 | 表示 | グローバルセカンダリインデックス | マテリアライズドビュー | 表示 |
| ネストされたテーブルまたはオブジェクト |
埋め込まれたドキュメント | マップ | マップ | マップ |
| 配列 |
配列 | リスト | リスト | リスト |