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 の関連書籍も参考になる。

関連用語