SAA DynamoDB 設計問題の頻出パターン10選|キー設計・GSI/LSI・キャパシティ・Global Tables を要件文で即断する

AWS SAA-C03 で DynamoDB は「NoSQL を選ぶべきか」だけでなく、キー設計・インデックス(GSI/LSI)・キャパシティモード・DAX・Global Tables・Streams まで踏み込んで問われる頻出テーマ。本記事は DynamoDB 設計問題を「アクセスパターンからのキー設計/ホットパーティション回避/LSI と GSI の使い分け/オンデマンドとプロビジョンド+Auto Scaling/DAX と ElastiCache/マルチリージョンの Global Tables/Streams によるイベント連携/TTL・PITR の運用」の頻出10パターンに分解する。各パターンで要件文のどのキーワードが正解を一意に決めるかを示す。結論は「DynamoDB 問題は機能の暗記ではなく、アクセスパターン・スケール・整合性・地理分散という4つの評価軸で解く」こと。

DynamoDB の設計問題を「NoSQL だから DynamoDB」で片づけようとすると、キー設計・GSI/LSI の使い分け・キャパシティモード・地理分散で足をすくわれる。 SAA-C03 で Amazon DynamoDB は、サーバーレスやマイクロサービスの相棒として出題比重が上がり続ける最重要データストアだ。だが問われるのは「NoSQL の一般論」ではなく、どのアクセスパターンに合わせてキーを切るのか・どのインデックスで検索するのか・スケールと整合性をどう捌くのか・複数リージョンにどう広げるのかという設計判断である。攻略の鍵は、頻出テーマを「キー設計(パーティション・複合・ホット回避)」「インデックス(LSI/GSI)」「キャパシティと性能(オンデマンド/プロビジョンド/DAX)」「地理分散と連携(Global Tables/Streams/運用)」の4系統×10パターンに畳み、要件文のキーワードから正解を一意に引く反射を作ること。本記事では、SAA 本番でそのまま選択肢を絞れる粒度で、DynamoDB 設計問題の頻出10パターンを分解する。読み終えれば、「最もスケーラブルで、要件のアクセスパターンを満たす構成はどれか」という問いに、迷わず正解を当てられるようになる。

※ 本記事はアフィリエイト広告(Amazon アソシエイト等)を含みます


📑 目次

  1. 結論:DynamoDB 問題は「機能」ではなく「4つの評価軸」で解く
  2. パターン1〜3:キー設計(パーティション・複合キー・ホット回避)
  3. パターン4〜5:インデックス(LSI と GSI の使い分け)
  4. パターン6〜7:キャパシティモードと DAX による高速化
  5. パターン8〜10:Global Tables・Streams・運用(TTL/PITR)
  6. 頻出ひっかけパターンと打ち手の整理
  7. 次のアクション チェックリスト
  8. 関連記事
  9. 関連サイト

1. 結論:DynamoDB 問題は「機能」ではなく「4つの評価軸」で解く

SAA-C03 の DynamoDB 問題を最短で解く骨格は、**「要件文が4つの評価軸——アクセスパターン(キー設計)・スケール(キャパシティと分散)・整合性(読み取りと ACID)・地理分散(マルチリージョン)——のどれを問うているかを特定し、その軸で選択肢を振るう」**ことだ。これが本記事の結論である。

理由は明快で、DynamoDB の各機能はどれも「ある評価軸を制御するための道具」だからだ。キー設計とインデックスは「どんなクエリを高速にするか(アクセスパターン)」を、オンデマンド/プロビジョンド/DAX は「スケールとレイテンシ」を、強力な整合性読み取りとトランザクションは「整合性」を、Global Tables は「地理分散」を担う。つまり要件文のキーワードが軸を指し示し、軸が正解の機能を一意に決める構造になっている。

具体例で見よう。「ミリ秒応答で無限にスケールし、スキーマが柔軟」——これはアクセスパターンの軸だから DynamoDB を選ぶ。「パーティションキー以外の属性で検索したい」——インデックスの軸だから GSI。「読み取りが極端に多くマイクロ秒応答が要る」——レイテンシの軸だから DAX。「複数リージョンで低遅延に読み書きしたい」——地理分散の軸だから Global Tables。ここで「DynamoDB は万能だから細かい設計は不要」と考えると、キー設計やインデックスを問う設問で誤答する。軸で解く——この一点が DynamoDB 問題の攻略法だ。


2. パターン1〜3:キー設計(パーティション・複合キー・ホット回避)

DynamoDB 問題の土台は「キーをどう切るか」だ。ここを3パターンで押さえると、多くの設問が即断できる。

パターン1:アクセスパターンからキーを逆算する

DynamoDB 設計の鉄則は、**「先にデータモデルを決めてからクエリを考える」RDB とは逆で、「先にアクセスパターン(どんなクエリを何で引くか)を洗い出し、それを満たすようにキーを設計する」**ことだ。パーティションキー(PK)に指定した属性でしか高速な Query はできないため、「何で検索するか」がそのまま PK 候補になる。SAA では「このアクセスパターンに最適なキー設計は?」という形で問われる。

パターン2:単純キーと複合キー(PK+SK)

プライマリキーには2種類ある。**単純キー(パーティションキーのみ)**は1属性で一意に決まる場合、**複合キー(パーティションキー+ソートキー)**は「同一 PK 内を範囲・順序で絞りたい」場合に使う。

プライマリキーの2形態(要件キーワード → 正解の型)
評価項目
単純キー(PKのみ)
複合キー(PK+SK) 推奨
一意性 PK だけで一意 PK+SK の組で一意
クエリ 1件取得(GetItem) 同一PK内をSKで範囲・並び替え
向くケース ユーザーIDで1件引く ユーザーの注文履歴を日付順に
キーワード 「IDで一意に取得」 「〜ごとに」「範囲」「時系列」
迷ったら『1件引くだけ=単純キー』『同じキー配下を並べたい・絞りたい=複合キー』で振るう。

パターン3:ホットパーティション回避

「特定のキーにアクセスが集中してスロットリングされる」——これはホットパーティションの設問だ。パーティションキーはカーディナリティ(値の種類)が高く、アクセスが均等に分散する属性を選ぶのが正解になる。


3. パターン4〜5:インデックス(LSI と GSI の使い分け)

「パーティションキー以外の属性で検索したい」——この瞬間にインデックスの出番だ。SAA 最頻出の切り分けがこの2パターンである。

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

PK とは別の属性を新しいパーティションキー/ソートキーにして検索したいなら GSI が正解だ。GSI はテーブル作成後でも追加・削除でき、元テーブルとは独立したキャパシティを持つ。「別の属性軸でまったく違うクエリをしたい」「後から検索軸を追加したい」がキーワードになる。

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

同じパーティションキーのまま、別のソートキーで並べ替え・絞り込みたいなら LSI だ。LSI はテーブル作成時にしか作れず、元テーブルとキャパシティを共有する。

GSI vs LSI(要件キーワード → 正解)
評価項目
GSI 推奨
LSI
パーティションキー 別の属性に変えられる 元テーブルと同じ
作成タイミング いつでも追加・削除可 テーブル作成時のみ
キャパシティ 独立(別枠) 元テーブルと共有
整合性 結果整合性のみ 強力な整合性も可
キーワード 「別の属性で検索」「後から追加」 「同じPKで別のソート」「強整合」
迷ったら『別の属性軸で検索・後付け=GSI』『同じPKで別ソート・強整合が要る=LSI』で振るう。

4. パターン6〜7:キャパシティモードと DAX による高速化

スケールとレイテンシの軸がこの2パターン。運用負荷とコストの設問にも直結する。

パターン6:オンデマンド vs プロビジョンド(+Auto Scaling)

キャパシティモードは2択だ。トラフィックが予測不能・急変する/管理を減らしたいならオンデマンド負荷が安定・予測可能でコストを最適化したいなら**プロビジョンド(+Auto Scaling)**が正解になる。

キャパシティモード(要件キーワード → 正解)
評価項目
オンデマンド 推奨
プロビジョンド+Auto Scaling
トラフィック 予測不能・スパイク・新規 予測可能・安定
運用 容量管理不要 目標使用率を設定して自動調整
コスト 使った分だけ(単価は高め) 安定負荷なら割安
キーワード 「予測できない」「急なスパイク」 「安定した負荷」「コスト最適化」
迷ったら『読めない・スパイク=オンデマンド』『安定・コスト重視=プロビジョンド+Auto Scaling』で振るう。

パターン7:DAX でマイクロ秒応答(読み取りキャッシュ)

「読み取りが極端に多く、ミリ秒でも足りずマイクロ秒応答が要る」——これは DAX(DynamoDB Accelerator) が正解だ。DAX は DynamoDB 専用のインメモリキャッシュで、アプリのコード変更を最小限にキャッシュを差し込めるのが強み。ElastiCache でも似たことはできるが、キャッシュ制御を自前実装する必要がある。


5. パターン8〜10:Global Tables・Streams・運用(TTL/PITR)

地理分散・イベント連携・運用の軸で、DynamoDB 問題の総仕上げとなる3パターンだ。

パターン8:Global Tables でマルチリージョン・低遅延

「複数リージョンのユーザーに低遅延で読み書きさせたい」「リージョン障害に備えたい」——これは Global Tables が正解だ。複数リージョンにアクティブ/アクティブでテーブルを複製し、各リージョンでローカルに読み書きできる。**「グローバルに低遅延」「マルチリージョン DR」「どのリージョンでも書き込める」**がキーワード。

パターン9:DynamoDB Streams でイベント駆動連携

「テーブルの変更(追加・更新・削除)をトリガーに後続処理をしたい」——これは DynamoDB StreamsLambda が正解だ。データの変更イベントを時系列で捕捉し、Lambda で集計・通知・他システム連携を非同期に実行する。「変更をトリガーに」「監査ログ」「集計テーブルの自動更新」がキーワードになる。

パターン10:TTL と PITR(自動削除・バックアップ)

運用系の細かい正解肢も押さえておく。**TTL(Time To Live)**は、各アイテムに有効期限のタイムスタンプ属性を設定し、期限切れアイテムを自動削除する機能。「セッションデータや一時データを自動で消したい」がキーワード。**PITR(Point-in-Time Recovery)**は、直近35日間の任意の秒単位に復元できる継続バックアップで、「誤削除・誤更新から復旧したい」が該当する。


6. 頻出ひっかけパターンと打ち手の整理

DynamoDB 問題は、正しい打ち手と“やりがちな誤答”が明確に対になっている。表で押さえれば本番で機械的に振るえる。


7. 次のアクション チェックリスト

DynamoDB 設計パターンを、今日からの学習に落とし込むための具体アクションをまとめる。


8. 関連記事


9. 関連サイト

AWS 公式