DynamoDB のインデックス、ストリーム、最適化
AWS データストアの活用
Dunieski Otano
AWS Solutions Architect
実行できなかったクエリ
- テーブル: userId(パーティションキー)、orderDate(ソートキー)
- 目的: メールアドレスで注文を検索
- 問題: キー以外の属性ではクエリ不可
- 解決策: グローバルセカンダリインデックス
グローバルセカンダリインデックス(GSI)
- ベーステーブルとは異なるパーティションキー
- テーブル作成後いつでも追加可能
- 結果整合性読み取りのみ
- 用途: 非プライマリキー属性へのクエリ
ローカルセカンダリインデックス(LSI)
- 同じパーティションキー、異なるソートキー
- テーブル作成時に作成する必要あり
- 強整合性読み取りをサポート
- 用途: パーティション内の代替ソート順

GSI と LSI の使い分け
- GSI: 異なるパーティションキー、いつでも追加可、結果整合性
- LSI: 同じパーティションキー、テーブル作成時に作成、強整合性
- 最も一般的: 柔軟なアクセスパターンには GSI
DynamoDB のデータシリアライゼーション
- 問題: DynamoDB は Python オブジェクトを直接保存できない
- 解決策: JSON またはバイナリにシリアライズ
- JSON: シンプルなデータ(辞書、リスト)- json.dumps()
- Base64: バイナリデータ(画像、トークン)
変更データキャプチャのための DynamoDB Streams
- ストリーム: テーブル変更の順序付きログ
- キャプチャ対象: 挿入、更新、削除
- 用途: 監査ログ、レプリケーション、トリガー
- Lambda と組み合わせてリアルタイム処理が可能
自動有効期限のための Time-to-Live
- TTL: 有効期限後にアイテムを自動削除
- TTL 属性に Unix タイムスタンプを設定
- 適した用途: セッション、一時トークン、キャッシュ
- TTL による削除はコスト不要
インデックスの射影タイプとクエリパフォーマンス
- KEYS_ONLY: キー属性のみ、最小サイズ
- INCLUDE: キー+指定した属性
- ALL: すべての属性、最大サイズ、追加フェッチ不要
- トレードオフ: ストレージコスト対クエリパフォーマンス
バッチ操作とトランザクション
- BatchGetItem: 最大 100 件・16MB まで読み取り
- BatchWriteItem: 最大 25 件まで書き込み
- TransactWriteItems: 最大 100 件への ACID トランザクション
- 用途: 効率化(バッチ)または整合性確保(トランザクション)
Preparing Video For Download...