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生成のオリジナル問題。
無料で演習を始める →