DVAAWSのサービスを使用した開発
DynamoDBテーブルにはパーティションキー customerId のみが定義されています。アプリケーションでは orderStatus ごとに注文を高速検索したい一方で、既存テーブルのキーは変更したくありません。最も適切な方法はどれですか。
AorderStatus をパーティションキーとするグローバルセカンダリインデックスを追加する
✓ 正解
GSIはテーブルとは異なるキー構成を利用できるため、orderStatusをキーにした検索を効率良く実現できます。既存テーブルの主キーを変更する必要もなく、新しいアクセスパターンを追加できます。
BorderStatus をソートキーとするローカルセカンダリインデックスを追加する
LSIはテーブルと同じパーティションキーを使用する必要があり、テーブル作成後に追加することもできません。今回の要件では条件を満たせません。
CScan を実行し FilterExpression で orderStatus を絞り込む
Scanは全アイテムを読み取ってから条件を適用するため、大量データでは読み取りコストとレイテンシが増加します。検索用途には適しません。
Dテーブルをエクスポートして Athena から検索する
AthenaはS3上の分析向けサービスであり、オンラインアプリケーションのリアルタイム検索には適していません。要件を満たす方法ではありません。
解説
グローバルセカンダリインデックス(GSI)はテーブルとは異なるパーティションキーやソートキーを持つことができ、既存テーブルの主キーを変更せずに新しいアクセスパターンを追加できます。一方、ローカルセカンダリインデックス(LSI)はテーブル作成時にしか定義できず、パーティションキーはテーブルと同一である必要があります。Scan は大量データでは非効率であり、Athena は分析用途であってリアルタイム検索には適していません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →