DynamoDB のインデックス、ストリーム、最適化

AWS データストアの活用

Dunieski Otano

AWS Solutions Architect

実行できなかったクエリ

  • テーブル: userId(パーティションキー)、orderDate(ソートキー)
  • 目的: メールアドレスで注文を検索
  • 問題: キー以外の属性ではクエリ不可
  • 解決策: グローバルセカンダリインデックス
    • インデックスにより複数のアクセスパターンが可能

gsi

AWS データストアの活用

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

  • ベーステーブルとは異なるパーティションキー
  • テーブル作成後いつでも追加可能
  • 結果整合性読み取りのみ
  • 用途: 非プライマリキー属性へのクエリ

gsi_1

AWS データストアの活用

ローカルセカンダリインデックス(LSI)

  • 同じパーティションキー、異なるソートキー
  • テーブル作成時に作成する必要あり
  • 強整合性読み取りをサポート
  • 用途: パーティション内の代替ソート順

lsi

AWS データストアの活用

GSI と LSI の使い分け

  • GSI: 異なるパーティションキー、いつでも追加可、結果整合性
  • LSI: 同じパーティションキー、テーブル作成時に作成、強整合性
  • 最も一般的: 柔軟なアクセスパターンには GSI

gsi_or_lsi

AWS データストアの活用

DynamoDB のデータシリアライゼーション

  • 問題: DynamoDB は Python オブジェクトを直接保存できない
  • 解決策: JSON またはバイナリにシリアライズ
  • JSON: シンプルなデータ(辞書、リスト)- json.dumps()
  • Base64: バイナリデータ(画像、トークン)

serialization

AWS データストアの活用

変更データキャプチャのための DynamoDB Streams

  • ストリーム: テーブル変更の順序付きログ
  • キャプチャ対象: 挿入、更新、削除
  • 用途: 監査ログ、レプリケーション、トリガー
  • Lambda と組み合わせてリアルタイム処理が可能

streams

AWS データストアの活用

自動有効期限のための Time-to-Live

  • TTL: 有効期限後にアイテムを自動削除
  • TTL 属性に Unix タイムスタンプを設定
  • 適した用途: セッション、一時トークン、キャッシュ
  • TTL による削除はコスト不要

ttl

AWS データストアの活用

インデックスの射影タイプとクエリパフォーマンス

  • KEYS_ONLY: キー属性のみ、最小サイズ
  • INCLUDE: キー+指定した属性
  • ALL: すべての属性、最大サイズ、追加フェッチ不要
  • トレードオフ: ストレージコスト対クエリパフォーマンス

index

AWS データストアの活用

バッチ操作とトランザクション

  • BatchGetItem: 最大 100 件・16MB まで読み取り
  • BatchWriteItem: 最大 25 件まで書き込み
  • TransactWriteItems: 最大 100 件への ACID トランザクション
  • 用途: 効率化(バッチ)または整合性確保(トランザクション)

batch

AWS データストアの活用

練習しましょう!

AWS データストアの活用

Preparing Video For Download...