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

あるソーシャルメディアアプリケーションでは、Amazon DynamoDBを使用してユーザーの投稿データを管理しています。テーブルは`UserId`(パーティションキー)と`PostId`(ソートキー)で構成されています。アプリケーションでは、テーブル作成後に追加された要件として、`Category`(特定の投稿カテゴリ)ごとに`CreatedAt`(作成日時)の降順で効率的にクエリを実行する必要があります。最小限の開発・運用オーバーヘッドでこの検索要件を満たすDynamoDBのインデックス設計はどれですか。

A
グローバルセカンダリインデックス(GSI)を作成し、パーティションキーに`Category`、ソートキーに`CreatedAt`を指定する。
✓ 正解
GSIはテーブル作成後でも追加可能であり、ベーステーブルと異なるパーティションキー(Category)とソートキー(CreatedAt)を指定できるため、要件を満たす最適な設計です。
B
ローカルセカンダリインデックス(LSI)を作成し、パーティションキーに`Category`、ソートキーに`CreatedAt`を指定する。
LSIはベーステーブルと同一のパーティションキー(UserId)を使用する必要があり、かつテーブル作成時にしか定義できないため、作成済みのテーブルに対する変更要件を満たせません。
C
テーブルに対してScan操作を実行し、`Category`属性に対するFilterExpressionを適用して結果をメモリ上でソートする。
Scan操作はテーブル全体のデータを読み取るため、データ量の増加に伴いキャパシティ消費とレイテンシーが著しく増大します。頻繁なクエリ要件に対するアプローチとして不適切です。
D
テーブル作成時のキー設計を変更し、`Category`と`CreatedAt`を組み合わせた複合プライマリキーでテーブルを全再作成する。
プライマリキーの変更のためにテーブルを全再作成することは、データの移行作業やダウンタイムが発生し、開発・運用オーバーヘッドが非常に大きくなるため避けるべきです。

解説

既存のDynamoDBテーブルに対して後から新しいパーティションキーとソートキーの組み合わせで検索を行いたい場合、グローバルセカンダリインデックス(GSI)を使用する必要があります。GSIはテーブル作成後でも任意のタイミングで追加可能です。一方、ローカルセカンダリインデックス(LSI)はベーステーブルと同じパーティションキーを共有する必要があり、かつテーブル作成時にしか定義できません。

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

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

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