NoSQL
リレーショナルモデル以外のデータベースの総称で、スケーラビリティと柔軟性を重視する
NoSQL とは
NoSQL (Not Only SQL) は、リレーショナルモデル (テーブル + SQL) 以外のデータベースの総称で、水平スケーラビリティ、柔軟なスキーマ、高スループットを重視する。DynamoDB、MongoDB、Redis、Cassandra が代表例。
NoSQL の種類
NoSQL の種類を以下にまとめる。
| 種類 | データモデル | AWS サービス | 用途 |
|---|---|---|---|
| キーバリュー | キー → 値 | DynamoDB | セッション、キャッシュ |
| ドキュメント | JSON ドキュメント | DocumentDB | CMS、カタログ |
| カラムファミリー | 列指向 | Keyspaces (Cassandra) | 時系列、ログ |
| グラフ | ノード + エッジ | Neptune | SNS、不正検知 |
RDB vs NoSQL
RDB と NoSQL の違いを以下にまとめる。
| 観点 | RDB (RDS) | NoSQL (DynamoDB) |
|---|---|---|
| スキーマ | 固定 (事前定義) | 柔軟 (スキーマレス) |
| スケーリング | 垂直 (スケールアップ) | 水平 (スケールアウト) |
| JOIN | ✅ | ❌ (非正規化で対応) |
| トランザクション | ACID | 限定的 (DynamoDB Transactions) |
| 一貫性 | 強い整合性 | 結果整合性 (強い整合性もオプション) |
| 用途 | 複雑なリレーション | 高スループット、大規模データ |
DynamoDB の特徴
DynamoDB の特徴のコード例を示す。
// スキーマレス: アイテムごとに異なる属性を持てる
await db.put({ TableName: 'items', Item: { id: '1', name: 'Alice', age: 30 } });
await db.put({ TableName: 'items', Item: { id: '2', name: 'Bob', tags: ['admin'] } });
// age がないアイテム、tags があるアイテムが共存
選択基準
複雑なリレーションや JOIN が必要なら RDB (RDS, Aurora)、高スループット・低レイテンシなら DynamoDB、柔軟なスキーマなら DynamoDB や DocumentDB、グラフ構造 (SNS、推薦) なら Neptune、キャッシュやセッションなら ElastiCache (Redis)、全文検索なら OpenSearch が適している。
CAP 定理
分散システムは Consistency (全ノードが同じデータ)、Availability (全リクエストに応答)、Partition Tolerance (ネットワーク分断に耐える) の 3 つを同時に満たせない。
DynamoDB は AP (Availability + Partition Tolerance) を選択し、結果整合性をデフォルトとする。ConsistentRead: true で強い整合性も可能。
DynamoDB の基本操作
DynamoDB の基本操作のコード例を示す。
// 書き込み (スキーマレス)
await db.put({ TableName: 'items', Item: { id: '1', name: 'Alice', tags: ['admin'] } });
// 読み取り
const item = await db.get({ TableName: 'items', Key: { id: '1' } });
NoSQL の理解を深めるには関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
DynamoDB
AWS のフルマネージド NoSQL データベースで、ミリ秒単位のレイテンシとシームレスなスケーリングを提供する
シングルテーブル設計
DynamoDB で複数のエンティティを 1 つのテーブルに格納し、効率的なアクセスパターンを実現する設計手法
データ正規化
データベースの冗長性を排除し、データの一貫性を保つためにテーブル構造を分割・整理する手法
ACID
データベーストランザクションの 4 つの特性 - 原子性、一貫性、分離性、永続性
CAP 定理
分散システムで一貫性、可用性、分断耐性の 3 つを同時に満たすことはできないという定理
結果整合性
分散システムで更新が全ノードに即座に反映されず、最終的に一貫した状態に収束するモデル
関連する記事
データベース本ガイド - SQL から設計まで学べる技術書の選び方
データベースの基礎から設計、パフォーマンスチューニングまで学べる技術書の選び方と学習順序を紹介します。
README を書くように本を読む - エンジニアのための構造化読書法
エンジニアが日常的に書く README のフォーマットを読書に応用する方法を紹介します。目的・使い方・注意点の 3 点で本の内容を整理すると、知識の再利用性が飛躍的に高まります。
インフラ・クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。