DynamoDB
AWS のフルマネージド NoSQL データベースで、ミリ秒単位のレイテンシとシームレスなスケーリングを提供する
AWSデータベース
DynamoDB とは
Amazon DynamoDB は、AWS が提供するフルマネージドの NoSQL データベースサービスである。キーバリュー型とドキュメント型の両方のデータモデルをサポートし、どんな規模のワークロードでもミリ秒単位のレイテンシを維持する。サーバーのプロビジョニング、パッチ適用、レプリケーションが不要で、サーバーレスアーキテクチャとの親和性が高い。
データモデル
DynamoDB のテーブルは、パーティションキー (PK) とオプションのソートキー (SK) で構成される。
- パーティションキー: データの分散先パーティションを決定する。均等に分散するキー設計が重要
- ソートキー: パーティション内でのデータの並び順を決定する。範囲クエリ (
begins_with,between) が可能
PK: USER#123, SK: PROFILE → ユーザープロフィール
PK: USER#123, SK: ORDER#2024-01 → ユーザーの注文
PK: USER#123, SK: ORDER#2024-02 → ユーザーの注文
キャパシティモード
- オンデマンド: リクエスト数に応じて自動スケール。トラフィックが予測困難な場合に適する。キャパシティプランニング不要
- プロビジョンド: 読み取り/書き込みキャパシティユニットを事前に設定。トラフィックが予測可能な場合にコスト効率が良い。Auto Scaling と組み合わせて使う
Single Table Design
DynamoDB では、RDB のように複数テーブルを JOIN できない。代わりに、1 つのテーブルに複数のエンティティ (ユーザー、注文、商品) を格納する Single Table Design が推奨される。PK と SK の設計でアクセスパターンを最適化する。
RDB との比較
| 観点 | DynamoDB | RDB (Aurora/RDS) |
|---|---|---|
| スケーリング | 水平 (自動) | 垂直 (手動) |
| クエリの柔軟性 | PK/SK ベース (制限あり) | SQL (柔軟) |
| トランザクション | 最大 100 アイテム | 複雑なトランザクション可能 |
| コスト | リクエスト数ベース | インスタンス時間ベース |
| 適するケース | 高スループット、単純なアクセスパターン | 複雑なクエリ、JOIN が必要 |
基本操作
import { DynamoDBClient, PutItemCommand, GetItemCommand } from '@aws-sdk/client-dynamodb';
const db = new DynamoDBClient({});
// 書き込み
await db.send(new PutItemCommand({
TableName: 'users',
Item: { id: { S: '123' }, name: { S: 'Alice' } },
}));
// 読み取り
const result = await db.send(new GetItemCommand({
TableName: 'users',
Key: { id: { S: '123' } },
}));
「The DynamoDB Book」(Alex DeBrie 著) が DynamoDB のデータモデリングを体系的に解説した専門書として知られる。
DynamoDB の関連書籍も参考になる。