NoSQL

リレーショナルモデル以外のデータベースの総称で、スケーラビリティと柔軟性を重視する

データベースアーキテクチャ

NoSQL とは

NoSQL (Not Only SQL) は、リレーショナルモデル (テーブル + SQL) 以外のデータベースの総称で、水平スケーラビリティ、柔軟なスキーマ、高スループットを重視する。DynamoDB、MongoDB、Redis、Cassandra が代表例。

NoSQL の種類

種類 データモデル AWS サービス 用途
キーバリュー キー → 値 DynamoDB セッション、キャッシュ
ドキュメント JSON ドキュメント DocumentDB CMS、カタログ
カラムファミリー 列指向 Keyspaces (Cassandra) 時系列、ログ
グラフ ノード + エッジ Neptune SNS、不正検知

RDB vs NoSQL

観点 RDB (RDS) NoSQL (DynamoDB)
スキーマ 固定 (事前定義) 柔軟 (スキーマレス)
スケーリング 垂直 (スケールアップ) 水平 (スケールアウト)
JOIN ❌ (非正規化で対応)
トランザクション ACID 限定的 (DynamoDB Transactions)
一貫性 強い整合性 結果整合性 (強い整合性もオプション)
用途 複雑なリレーション 高スループット、大規模データ

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 の基本操作

// 書き込み (スキーマレス)
await db.put({ TableName: 'items', Item: { id: '1', name: 'Alice', tags: ['admin'] } });

// 読み取り
const item = await db.get({ TableName: 'items', Key: { id: '1' } });

NoSQL の理解を深めるには関連書籍が参考になる。

関連用語