はじめに
AWS DVA取得に向けた勉強の一環です。
新たな学びがあったら随時追記していきます。
正確性は保証しませんので参考程度に見てください。
特徴
- フルマネージドの Key-Value データベース
- NoSQL(SQLライクな言語 PartiQL 使用可能)
- サーバーレス
- 優れた水平の拡張性
- 3つのAZにデータ保存
データモデル
Primary Key
- パーティションで分散管理、ソートで並び替え
- Partition Key(主キー)
- アクセス分散のためランダム値を推奨
- 日付などを使う場合はサフィックスを付与
- Sort Key
- 複合主キーとして使用可能
- Attributes(属性)
キャパシティモード
- オンデマンドキャパシティモード
- 使用量と価格が変動
- プロビジョンドキャパシティモード
- 使用量と価格が固定
- Auto Scaling 設定可能
コスト
- 読み込み・書き込みは従量課金
- データ転送に課金
- バックアップ・復元は GB 単位で課金
- レプリケート書き込み要求にも課金
- 変更データのキャプチャ
- DynamoDB Accelerator (DAX)
- 1時間あたり課金
- キャッシュにより読み取りを高速化(ミリ秒 → マイクロ秒)
- 書き込みはキャッシュとDynamoDBテーブルの両方に適用
- DynamoDB Streams
- 直近24時間のCUD変更履歴を保存
- Lambdaと連携して変更検出や通知が可能
- グローバルテーブルの利用に必要
セカンダリインデックス
ローカルセカンダリインデックス(LSI)
- 元テーブルと同じパーティション内で検索を完結
- テーブル作成時のみ設定可能
- パーティションキーごとのインデックスサイズ上限は 10GB
グローバルセカンダリインデックス(GSI)
- 主キーとは別の属性を使ったインデックス
- 後から設定可能
デメリット
- 書き込みコストが高くなる
- ストレージを消費する
インデックスの多用は推奨されず、多用する場合は RDS を検討するのが望ましい。
検索性向上とストレージ・パフォーマンスのトレードオフを考慮する必要がある。
グローバルテーブル
- 任意のリージョンにレプリカテーブルを作成できる
書き込み
- 1秒以内に3つのAZにレプリケートされ、結果整合性が保たれる
強力な整合性の読み込み
- 変更が反映されたデータを返す
- レイテンシが高くなる
- スループット消費が大きくなる
API
- 基本操作
- PutItem
- UpdateItem
- GetItem
- DeleteItem
- 検索
- クエリ(検索結果の配列を返す)
- スキャン(全項目を走査するため時間がかかる)
- バッチ処理
- BatchWriteItem / BatchGetItem(大量データの書き込み・読み込み)
- 途中で失敗しても最後まで処理を継続
- トランザクション
- 複数のアクションをまとめて処理
- All or Nothing(一つ失敗した場合はすべて失敗)
バックアップ
オンデマンドバックアップ
- 任意のタイミングで取得
- 数秒で復元可能
- 明示的に削除しない限り保持
ポイントインタイムリカバリ(PITR)
- 5分おきにログを取得
- 最大35日前のログまで保持
復元
- 既存のテーブルではなく新規テーブルとして復元
- 復元時に設定変更可能
- セカンダリインデックス
- キャパシティモード
- WCU / RCU
- 暗号化
- 復元後に設定が必要
- Auto Scaling
- IAMポリシー
- CloudWatch
- タグ
- ストリーム設定
- TTL
セキュリティ
- IAMによるアクセス制御
- テーブル、インデックス、ストリームごとに ARN を持つ
- 暗号化
- DynamoDB管理、AWS KMS、ユーザー管理による暗号化が使用可能