AWS DVA試験対策:DynamoDBの基本と試験でおさえるべきポイント
こんにちは☁️
今回は、AWS認定DVA(Developer Associate)試験に向けてよく問われる DynamoDB について、基本情報や機能、試験での狙われポイントをわかりやすく解説していきます!
🔰 基本情報
Amazon DynamoDB は、AWSが提供するフルマネージドな NoSQL データベースサービスです。
高速でスケーラブル、しかもサーバーレスなので、アプリケーション側でインフラの管理を気にせずに使えます。
✨ 特徴
- キーバリュー型 & ドキュメント指向型をサポート
- シームレスなスケーリング
- 高可用性・高耐障害性(マルチAZ対応)
⚙️ 主な機能と特徴
✅ パーティションキー(Partition Key)とソートキー(Sort Key)
- 主キーの構成に使われます。
- 単一キー(パーティションキーのみ)と複合キー(パーティションキー+ソートキー)のどちらも可能。
📌 試験対策ポイント:データのユニーク性は主キーによって担保されます!
✅ グローバルセカンダリインデックス(GSI)・ローカルセカンダリインデックス(LSI)
| 比較項目 | GSI(グローバルセカンダリインデックス) | LSI(ローカルセカンダリインデックス) |
|---|---|---|
| 作成タイミング | テーブル作成後でも追加可能 | テーブル作成時にのみ定義できる |
| パーティションキー | テーブルと異なるキーを指定可能 | テーブルと同じキーを使用 |
| ソートキー | 任意のキーを指定可能 | テーブルとは異なるキーを指定可能 |
| クエリ範囲 | 別のアクセスパターンを提供(完全に独立) | 同一PK内での並び順変更などに有効 |
| 容量・スループット | GSIごとにRCU/WCUを管理(別枠) | テーブルと共有 |
| コスト | 別途スループットと保存コストがかかる | テーブルコストに含まれる |
| サポートしている読み取り | 結果整合性のみ | 強整合性/結果整合性の両方に対応 |
🧱 作成時のキー構成
-
GSI:異なるパーティションキーと任意のソートキーを指定可能
例:テーブルではuser_idを主キー → GSIではemailとcreated_atを使う -
LSI:テーブルと同じパーティションキーを使い、ソートキーのみ変更可能
例:user_id+timestampで投稿履歴を並び替えなど
📌 試験対策ポイント
- LSIは後から追加できない(最初に設計が必要)
- GSIは柔軟で便利だけどコストに注意!
- インデックス設計はアクセスパターンに合わせて!
✅ DynamoDB Streams
- データの変更(追加・更新・削除)をキャプチャ可能
- Lambda と組み合わせてリアクティブな処理が実現できる
📌 試験対策ポイント:
Streams + Lambda = サーバーレスイベント処理 の定番構成!
✅ オートスケーリング(Auto Scaling)
- 読み書き容量を自動で増減調整できる便利な機能!
📌 注意点:
急な負荷には対応できないことも → プロビジョンド+バーストキャパシティも検討
📈 RCU / WCUとは?
| 種類 | 内容 |
|---|---|
| RCU(Read Capacity Unit) | 1秒間に4KBの強整合性読み取りが可能 |
| WCU(Write Capacity Unit) | 1秒間に1KBの書き込みが可能 |
📌 試験で覚えるべきポイント
- 結果整合性読み込み → RCU 0.5個 / 4KB
- 強整合性読み込み → RCU 1個 / 4KB
- 書き込み → WCU 1個 / 1KB
🧪 DynamoDBのAPI操作まとめ
| API操作 | よくある用途 | 特徴 | 試験ポイント・注意点 |
|---|---|---|---|
| PutItem | データの登録・上書き | 条件付き書き込み対応 |
ConditionExpression を活用 |
| GetItem | 単一アイテム取得 | 強整合性も指定可能 | 結果整合性がデフォルト |
| UpdateItem | 属性の部分更新 |
UpdateExpression 必須 |
エイリアス記法に注意 |
| DeleteItem | 単一削除 | 主キー指定 | Keyミスに注意 |
| Query | 条件付き検索 | インデックス活用が可能 | パーティションキー必須 |
| Scan | 全件取得 | 非効率、コスト高 | フィルターは除外のみ |
| Transaction系 | 複数操作まとめて実行 | ACID保証 | 最大25件、ロールバック可能 |
| BatchGetItem | 一括取得(最大100件) | 結果整合性のみ対応 |
UnprocessedKeys に注意 |
| BatchWriteItem | 一括Put/Delete(最大25件) | Updateは不可 |
UnprocessedItems 再試行必要 |
🧾 DynamoDB APIで使われる主なパラメータ
| パラメータ名 | 目的 | よく使うAPI | 試験ポイント |
|---|---|---|---|
ReturnConsumedCapacity |
消費容量を取得 | ほとんど全て |
"INDEXES" vs "TOTAL"
|
ConsistentRead |
強整合性読み取り |
GetItem, Query
|
GSIでは使用不可 |
ProjectionExpression |
取得属性を絞る |
GetItem, Query, Scan
|
帯域削減・GSIとの相性 |
ExpressionAttributeNames |
属性名を安全に指定 |
UpdateItem など |
予約語対策に使う |
ExpressionAttributeValues |
値を安全に指定 | 条件式を含むすべてのAPI | バリューの型も意識 |
ConditionExpression |
条件付き操作 |
PutItem, UpdateItem, DeleteItem
|
整合性のためのバリデーション |
🔐 DynamoDBのロックメカニズム(排他制御)
| 種類 | サポート | 実現方法 | 試験キーワード |
|---|---|---|---|
| 悲観的ロック | ❌ | 不可(仕組みなし) | そもそもDynamoDBは非対応 |
| 楽観的ロック | ✅ |
ConditionExpression + バージョン管理 |
同時更新の競合回避 |
| トランザクション | ✅ | TransactWriteItems |
複数アイテムの整合性・一貫性 |
🧠 試験で問われやすいポイントまとめ
| 機能 | 覚えておくこと |
|---|---|
| パーティションキー | データの分散とスケーラビリティに影響 |
| GSI / LSI | GSIは後から作成OK、LSIは作成時のみ |
| DynamoDB Streams | Lambdaとの組み合わせでリアクティブ処理 |
| Auto Scaling | 自動スループット調整(限界に注意) |
| RCU / WCU | 単位の計算と整合性の違いを理解 |
| TTL(Time to Live) | 自動的なアイテム削除に使える |
| API操作 | 条件付き操作、バッチ系は再試行処理が鍵 |