Amazon DynamoDB
概要と特徴
| 項目 | 説明 |
|---|---|
| サービス名 | Amazon DynamoDB (アマゾン ダイナモディービー) |
| 提供元 | Amazon Web Services (AWS) |
| 種類 | NoSQLデータベース (Not only SQL) |
| 特徴 | フルマネージド(サーバー管理不要)なキーバリューおよびドキュメントデータベース。高いスケーラビリティ、パフォーマンス、耐久性、可用性を備えている。サーバーレス (Serverless) で利用可能。 |
| データモデル | キーバリュー型 (Key-Value) およびドキュメント型 (Document) |
| トランザクション | ACIDトランザクション (ACID Transactions) をサポート |
分類
- データベースの種類: NoSQLデータベース
- データモデル: キーバリュー型、ドキュメント型
- 管理形態: フルマネージドサービス (Fully Managed Service)
上位概念・下位概念
| 概念 | 具体例 | 説明 |
|---|---|---|
| 上位概念 | クラウドコンピューティング (Cloud Computing) | インターネット経由でコンピューティングリソースを提供するサービス形態。DynamoDBはこのサービス群の一つ。 |
| 上位概念 | AWS (Amazon Web Services) | Amazonが提供するクラウドサービスの総称。DynamoDBはこの中の一サービス。 |
| 上位概念 | NoSQLデータベース | リレーショナルデータベース(RDB)以外のデータモデルを持つデータベースの総称。 |
| 下位概念 | テーブル (Table) | DynamoDBにおけるデータ格納単位。 |
| 下位概念 | アイテム (Item) | テーブル内の1つの行(レコード)に相当。 |
| 下位概念 | 属性 (Attribute) | アイテム内の個々のデータ(カラム)に相当。 |
メリット
- スケーラビリティ (Scalability): データ量やトラフィックの増加に自動的かつ無制限にスケール可能。
- パフォーマンス (Performance): どのような規模でも一貫した1桁ミリ秒 (Single-digit Millisecond) のレイテンシを提供。
- 運用負荷の軽減: フルマネージドであり、サーバー管理、パッチ適用、バックアップなどの作業が不要。
- 耐久性 (Durability)・可用性 (Availability): データを複数のアベイラビリティゾーン (AZ) にわたって自動的に複製。耐久性は99.999999999% (イレブンナイン) を実現。
- コスト効率: オンデマンド (On-Demand) やプロビジョニング済みキャパシティ (Provisioned Capacity) など、柔軟な料金モデルがある。
デメリット
- 複雑なクエリへの制限: リレーショナルデータベース (RDB) のような複雑なJOIN操作や柔軟なクエリは困難。
- スキーマ設計の重要性: アプリケーションのアクセスパターンを考慮したテーブル設計(特にパーティションキーとソートキーの選定)が極めて重要。不適切な設計はパフォーマンスの低下を招く。
- 完全な互換性がない: 標準的なSQL(構造化照会言語)ではないため、RDBからの移行には学習コストと設計変更が必要。
既存との比較
| 比較対象 | Amazon DynamoDB (NoSQL) | リレーショナルデータベース (RDB) 例: Amazon RDS |
|---|---|---|
| データモデル | キーバリュー型、ドキュメント型。非構造化・半構造化データ向き。 | テーブル形式。厳密なスキーマ定義が必要。 |
| スケーリング | 水平スケーリング(シャーディング)。無制限に近いスケールが可能。 | 垂直スケーリングが基本。水平スケーリングは複雑。 |
| クエリ | プライマリキーまたはインデックスに基づくシンプルなクエリが中心。 | 複雑なJOIN、集計、柔軟なクエリが可能。 |
| トランザクション | 特定のアイテムやテーブル内での操作に限定的 (ACID)。 | 複数のテーブルにまたがる複雑なトランザクションに適している。 |
| レイテンシ | 規模に関わらず一貫して低い(ミリ秒単位)。 | 規模が大きくなるとレイテンシが増加する傾向がある。 |
競合
- Azure Cosmos DB (Microsoft)
- Google Cloud Firestore (Google Cloud Platform)
- MongoDB Atlas (MongoDB)
- Cassandra (オープンソース、またはDataStaxなどの商用版)
導入ポイント
- アクセスパターンの特定: アプリケーションのクエリ (Query) およびデータ更新 (Update) のパターンを徹底的に分析する。
- キー設計の最適化: パーティションキー (Partition Key) とソートキー (Sort Key) を用いて、ワークロードを均等に分散し、効率的なデータ取得を可能にするように設計する。
- グローバルセカンダリインデックス (GSI) の活用: プライマリキー以外の属性で検索が必要な場合にGSIを作成する。
- キャパシティモードの選択: トラフィックの変動が大きい場合はオンデマンド、安定している場合はプロビジョニング済みキャパシティを選択し、コストを最適化する。
注意点
- ホットパーティション: 特定のパーティションキーへのアクセスが集中すると、パフォーマンスが低下する(スロットリングの原因)。これを避けるための設計が必須。
- データ構造の柔軟性: スキーマレスだが、データの一貫性を保つため、アプリケーション側での整合性管理が必要。
- 高額なGSI利用: GSIの使用はコストが高くなる可能性があるため、インデックス設計には注意が必要。
今後
- サーバーレス化の推進: AWS Lambdaなどのサーバーレス機能との連携がさらに強化される。
- 開発者体験の向上: ツールやSDKの改善による開発の容易化。
- 継続的な新機能の追加: 機械学習 (ML) やデータ分析 (Analytics) サービスとの連携強化。
関連キーワード
- AWS Lambda
- API Gateway
- DynamoDB Streams
- Global Tables
- DAX (DynamoDB Accelerator)
- Eventually Consistent (結果整合性)
- Strongly Consistent (強い整合性)
- Partition Key
- Sort Key
- Local Secondary Index (LSI)
- Global Secondary Index (GSI)
- Write Capacity Unit (WCU)
- Read Capacity Unit (RCU)
- Throttling (スロットリング)