Amazon DynamoDBはAWSが提供するNoSQLデータベースサービスで、スケーラブルで高速なデータ管理を実現します。本記事では、DynamoDBのデータモデリングとインデックス設計の基本を解説します。
1. DynamoDBの概要
DynamoDBとは?
DynamoDBは、スキーマレスでフルマネージドのNoSQLデータベースであり、以下の特徴を持っています。
スケーラビリティ:自動でスケールアップ・スケールダウン
高速なパフォーマンス:低レイテンシでのデータ読み書き
サーバーレス運用:インフラ管理不要
高可用性:マルチリージョンレプリケーション対応
ユースケース
- リアルタイムデータ処理(IoT、ゲーム、金融取引)
- ユーザープロファイル管理(セッションデータ、設定情報)
- ログ・イベントデータの保存
- ECサイトの商品カタログ管理
2. データモデリングの基本
テーブル構成
DynamoDBでは、RDBのようなリレーショナルデータベースとは異なり、フラットな構造でデータを格納します。
属性名 | データ型 | 説明 |
---|---|---|
user_id | String | 主キー(PK) |
name | String | ユーザー名 |
email | String | メールアドレス |
created_at | Number | 登録日時 |
主キーの選択
DynamoDBの主キーは、以下の2種類があります。
- パーティションキー(単一主キー)
- 例:
user_id
(一意の値) - 検索がシンプルだが、パーティションの偏りが起こる可能性がある
- 例:
- パーティションキー + ソートキー(複合主キー)
- 例:
user_id
(パーティションキー) +created_at
(ソートキー) - 1つのユーザーに対して複数のデータを格納可能
- 例:
データの設計例(ユーザーの注文履歴)
{
"user_id": "12345",
"order_id": "A0001",
"product": "Laptop",
"price": 1000,
"created_at": 1678901234
}
user_id
(パーティションキー)created_at
(ソートキー)
この構造により、特定ユーザーの注文履歴を時系列順に取得できます。
3. インデックス設計
DynamoDBには、検索の効率を向上させるために インデックス の概念があります。
インデックスの種類
インデックス | 説明 |
---|---|
LSI(ローカルセカンダリインデックス) | 同じパーティションキーを持ちつつ、異なるソートキーで検索可能 |
GSI(グローバルセカンダリインデックス) | 別のパーティションキーを設定し、柔軟な検索を実現 |
ローカルセカンダリインデックス(LSI)
LSIは、同じパーティションキーのまま異なる属性でソートが可能 です。
例:ユーザーの注文履歴を価格順に検索
- テーブルキー:
user_id
(パーティションキー) +created_at
(ソートキー) - LSI:
user_id
(パーティションキー) +price
(ソートキー)
aws dynamodb query \\
--table-name Orders \\
--index-name PriceIndex \\
--key-condition-expression "user_id = :id" \\
--expression-attribute-values '{":id": {"S": "12345"}}'
グローバルセカンダリインデックス(GSI)
GSIは、異なるパーティションキーを設定できる ため、柔軟な検索が可能です。
例:メールアドレスからユーザーを検索
- テーブルキー:
user_id
(パーティションキー) - GSI:
email
(パーティションキー)
aws dynamodb query \\
--table-name Users \\
--index-name EmailIndex \\
--key-condition-expression "email = :email" \\
--expression-attribute-values '{":email": {"S": "user@example.com"}}'
4. 読み書き性能の最適化
プロビジョニングモード
DynamoDBは2つのモードでスループットを設定できます。
モード | 説明 |
---|---|
オンデマンドモード | 自動スケーリング。アクセスが一定しないワークロード向け |
プロビジョンドモード | 読み書きキャパシティユニット(RCU/WCU)を設定し、予測可能なトラフィック向け |
ベストプラクティス
GSIは頻繁にアクセスする属性を選択
ホットパーティションを避けるため、キーを分散
TTL(Time To Live)を活用して古いデータを自動削除
DynamoDB Streamsを使用して変更をトリガー
5. まとめ
DynamoDBを効果的に活用するには、適切なデータモデリングとインデックス設計が重要です。
- 単一主キー vs. 複合主キー:用途に応じて選択
- LSIとGSIの活用:検索の柔軟性を高める
- スループットの最適化:オンデマンド vs. プロビジョンド
次のステップでは、「EFS(Elastic File System)とEBS(Elastic Block Store)のストレージ戦略」について詳しく解説していきます!