DVAAWSのサービスを使用した開発
あるECサイトでは、Amazon DynamoDBを使用して注文履歴テーブル(パーティションキー: `CustomerId`、ソートキー: `OrderDate`)を管理しています。カスタマーサポートチームは、特定の注文ステータス(`OrderStatus`)を持つ注文を頻繁に検索する必要があります。テーブル作成後であり、強い一貫性のある読み込みは不要です。最も適切なDynamoDBの構成はどれですか。
A既存のテーブルにローカルセカンダリインデックス(LSI)を追加し、ソートキーに OrderStatus を指定する。
ローカルセカンダリインデックス(LSI)はテーブルの新規作成時にのみ定義可能であり、既存のDynamoDBテーブルに後から追加することはできません。
B既存のテーブルにグローバルセカンダリインデックス(GSI)を追加し、パーティションキーに OrderStatus を指定する。
✓ 正解
グローバルセカンダリインデックス(GSI)は既存テーブルに対して動的に追加でき、ベーステーブルと異なる属性をキーとして検索を実行できます。
Cテーブルを再作成し、CustomerId と OrderStatus を組み合わせた複合パーティションキーを事前に定義する。
GSIを追加することで既存のテーブル構造を維持したまま要件を満たせるため、テーブルを削除して再作成する必要はありません。
DScan オペレーションを実行し、FilterExpression を使用して OrderStatus が一致する項目のみを抽出する。
Scanオペレーションはテーブル全体を走査するため消費スルーパートとレイテンシが増大し、頻繁な検索操作の設計としては不適切です。
解説
既存のDynamoDBテーブルに対して後からインデックスを追加する場合、グローバルセカンダリインデックス(GSI)を使用する必要があります。GSIはベーステーブルと異なるパーティションキーおよびソートキーを設定でき、強い一貫性のある読み込み(Strongly Consistent Read)を必要としない検索要件に最適です。LSIはテーブル作成時のみ定義可能であるため後から追加できません。またScan操作はテーブル全体のデータを読み取るためパフォーマンス面で非効率です。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →