DVAAWSのサービスを使用した開発

DynamoDBテーブルにはパーティションキー customerId のみが定義されています。アプリケーションでは orderStatus ごとに注文を高速検索したい一方で、既存テーブルのキーは変更したくありません。最も適切な方法はどれですか。

A
orderStatus をパーティションキーとするグローバルセカンダリインデックスを追加する
✓ 正解
GSIはテーブルとは異なるキー構成を利用できるため、orderStatusをキーにした検索を効率良く実現できます。既存テーブルの主キーを変更する必要もなく、新しいアクセスパターンを追加できます。
B
orderStatus をソートキーとするローカルセカンダリインデックスを追加する
LSIはテーブルと同じパーティションキーを使用する必要があり、テーブル作成後に追加することもできません。今回の要件では条件を満たせません。
C
Scan を実行し FilterExpression で orderStatus を絞り込む
Scanは全アイテムを読み取ってから条件を適用するため、大量データでは読み取りコストとレイテンシが増加します。検索用途には適しません。
D
テーブルをエクスポートして Athena から検索する
AthenaはS3上の分析向けサービスであり、オンラインアプリケーションのリアルタイム検索には適していません。要件を満たす方法ではありません。

解説

グローバルセカンダリインデックス(GSI)はテーブルとは異なるパーティションキーやソートキーを持つことができ、既存テーブルの主キーを変更せずに新しいアクセスパターンを追加できます。一方、ローカルセカンダリインデックス(LSI)はテーブル作成時にしか定義できず、パーティションキーはテーブルと同一である必要があります。Scan は大量データでは非効率であり、Athena は分析用途であってリアルタイム検索には適していません。

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

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

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