AWSロードマップ

高パフォーマンスな設計を実現!DynamoDBのデータモデリングとGSI活用ガイド

Amazon DynamoDBはAWSが提供するNoSQLデータベースサービスで、スケーラブルで高速なデータ管理を実現します。本記事では、DynamoDBのデータモデリングとインデックス設計の基本を解説します。


1. DynamoDBの概要

DynamoDBとは?

DynamoDBは、スキーマレスでフルマネージドのNoSQLデータベースであり、以下の特徴を持っています。

スケーラビリティ:自動でスケールアップ・スケールダウン

高速なパフォーマンス:低レイテンシでのデータ読み書き

サーバーレス運用:インフラ管理不要

高可用性:マルチリージョンレプリケーション対応

ユースケース

  • リアルタイムデータ処理(IoT、ゲーム、金融取引)
  • ユーザープロファイル管理(セッションデータ、設定情報)
  • ログ・イベントデータの保存
  • ECサイトの商品カタログ管理

2. データモデリングの基本

テーブル構成

DynamoDBでは、RDBのようなリレーショナルデータベースとは異なり、フラットな構造でデータを格納します。

属性名データ型説明
user_idString主キー(PK)
nameStringユーザー名
emailStringメールアドレス
created_atNumber登録日時

主キーの選択

DynamoDBの主キーは、以下の2種類があります。

  1. パーティションキー(単一主キー)
    • 例:user_id(一意の値)
    • 検索がシンプルだが、パーティションの偏りが起こる可能性がある
  2. パーティションキー + ソートキー(複合主キー)
    • 例: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(ソートキー)
  • LSIuser_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(パーティションキー)
  • GSIemail(パーティションキー)
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)のストレージ戦略」について詳しく解説していきます!

-AWSロードマップ
-, , , , , , , , ,