無限ノック › 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オペレーションはテーブル全体のデータを読み取った後にフィルタリングを行うため、レスポンス遅延とRCUの無駄な消費を引き起こします。

解説

グローバルセカンダリインデックス(GSI)は既存のDynamoDBテーブルに対して後からいつでも追加することができ、ベーステーブルとは完全に異なるパーティションキーおよびソートキー属性を指定できます。結果整合性(Eventual Consistency)のみを許容する要件において、特定カテゴリ(Category)の投稿を作成日時(CreatedTimestamp)順に取得するアクセスパターンにはGSIが最適です。LSIはテーブル作成時のみ定義可能であり既存テーブルに追加できません。Scan処理はテーブル全体をフルスキャンするため無駄なRCUを消費します。

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

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

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