無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

あるソーシャルアプリケーションでは、Amazon DynamoDBを使用してユーザーの投稿データを管理しています。ベーステーブルのキー構造は `UserId`(パーティションキー)と `PostId`(ソートキー)です。開発チームは、特定のカテゴリ(`Category`)に属する投稿を投稿日時(`CreatedTimestamp`)の新しい順で検索できる新機能を追記したいと考えています。このクエリ操作において強力な一貫性(Strongly Consistent Read)は不要です。既存のテーブル構造を変更せずにこの要件を満たす、最も適切なDynamoDBの構成はどれですか。

A
既存のテーブルにグローバルセカンダリインデックス(GSI)を追加し、パーティションキーを Category、ソートキーを CreatedTimestamp に設定する。
✓ 正解
既存テーブルに対して後から追加でき、ベーステーブルと異なるキー属性を指定してクエリを実行できるGSIが本アクセスパターンに最適です。
B
既存のテーブルにローカルセカンダリインデックス(LSI)を追加し、パーティションキーを UserId、ソートキーを Category に設定する。
ローカルセカンダリインデックス(LSI)はテーブルの新規作成時のみ定義可能であり、運用中の既存テーブルに追加することは不可能です。
C
既存のテーブルを一度削除し、UserId をパーティションキー、Category をソートキーとする新しいDynamoDBテーブルを再作成する。
GSIを追加することで既存のテーブル構造のまま要件を満たせるため、既存テーブルを削除して再作成する必要はありません。
D
インデックスを追加せず、Scan オペレーションに対して FilterExpression を適用し Category と CreatedTimestamp でフィルタリングする。
Scan操作はテーブル全体のデータを全件読み取った後にフィルタリングするため、消費スループットとレイテンシが増大し不適切です。

解説

グローバルセカンダリインデックス(GSI)は既存のDynamoDBテーブルに対して後からいつでも追加でき、ベーステーブルとは完全に異なるパーティションキーおよびソートキー属性を指定できます。強力な一貫性のある読み込みが不要な場合、特定のカテゴリ(Category)で絞り込み投稿日時(CreatedTimestamp)順で取得するアクセスパターンにはGSIが最適です。LSIはテーブル作成時のみ定義可能であり既存テーブルに追加できません。またScan処理はテーブル全体を走査するため大量データ時のレスポンス低下とRCU消費を引き起こします。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る