コンテンツにスキップ

ChatGPTによる引用(2025/01/18時点)

Amazon DynamoDBとは?

Amazon DynamoDB は、AWS(Amazon Web Services)が提供する フルマネージド型のNoSQLデータベースサービス です。スケーラビリティ、パフォーマンス、可用性に優れ、大規模なアプリケーションでも高速なデータ処理を実現します。


1. 特徴

✅ フルマネージド

DynamoDBはAWSが完全に管理するため、サーバーメンテナンス、スケーリング、レプリケーション などをユーザーが意識する必要がありません。

✅ 高可用性とスケーラビリティ

  • 水平スケーリング により、大量のデータを処理可能。
  • リージョンをまたいだレプリケーション(Global Tables) に対応。

✅ 高速なパフォーマンス

  • キー・バリュー型(Key-Value)ドキュメント指向(Document) のデータモデルに対応し、ミリ秒単位のレスポンス を実現。
  • インデックス を活用することで、柔軟なクエリが可能。

✅ 柔軟なデータモデル

  • スキーマレス で、テーブルごとに項目(アイテム)の構造を自由に定義可能。
  • JSON形式 のデータを保存可能。

✅ 自動スケーリング

  • オンデマンドキャパシティ(On-Demand Capacity) により、トラフィックの増減に応じて自動でスケール。
  • プロビジョンドキャパシティ(Provisioned Capacity) では、事前に読み書き性能を指定可能。

2. データモデル

DynamoDBの基本的なデータ構造は テーブル(Table) で構成され、各テーブルは アイテム(Item) の集合です。

📌 基本的な用語

用語 説明
テーブル(Table) データの格納単位
アイテム(Item) テーブル内の個々のデータ(リレーショナルDBの「行」に相当)
属性(Attribute) アイテムの個々のデータフィールド(リレーショナルDBの「列」に相当)
パーティションキー(Partition Key) プライマリキーの一部で、データの分散管理を決定
ソートキー(Sort Key) (オプション)プライマリキーに追加可能なキー

📌 キー設計の例

① 単一のパーティションキー

1
2
3
4
5
{
  "UserId": "12345",
  "Name": "Alice",
  "Age": 30
}

→ UserId を一意の識別子として使用。

② パーティションキー + ソートキー

1
2
3
4
5
{
  "UserId": "12345",
  "OrderId": "A001",
  "TotalPrice": 5000
}

→ UserIdごとに複数の注文(OrderId)を管理できる。


3. クエリ & インデックス

DynamoDBは SQLのようなクエリ を使えませんが、キーを使った検索インデックス を活用することで柔軟なデータ取得が可能です。

✅ クエリ(Query)

1
2
3
response = table.query(
    KeyConditionExpression=Key('UserId').eq('12345')
)

→ UserId = '12345' のデータを取得。

✅ スキャン(Scan)

1
2
3
response = table.scan(
    FilterExpression=Attr('Age').gt(25)
)

→ Age が 25 を超えるすべてのアイテムを取得。

✅ グローバルセカンダリインデックス(GSI)

1
2
3
4
5
6
{
  "IndexName": "AgeIndex",
  "KeySchema": [
    { "AttributeName": "Age", "KeyType": "HASH" }
  ]
}

→ Age をキーとして検索できるようにする。


4. 料金体系

DynamoDBの料金体系は 使用量ベース で、主に以下の2つのプランがあります。

✅ オンデマンドキャパシティ

  • リクエスト数に応じて自動スケール。
  • 小規模アプリや変動の激しいワークロード向け

✅ プロビジョンドキャパシティ

  • 事前に読み書きキャパシティを設定
  • 予測可能な負荷に対してコストを抑えられる。

5. まとめ

DynamoDBは スケーラブルで高可用性のNoSQLデータベース であり、大規模アプリケーションのデータストアに最適です。
DynamoDBの使用方法として、ローカル環境で DynamoDB をエミュレートDynamoDB-localを活用すれば、ローカル環境で開発を行いながら、本番環境にスムーズに移行できます。
ただし、SQLのようなリレーショナルな操作は得意ではないため、用途に応じた適切な設計が重要です。