DVAAWSのサービスを使用した開発
現在運用中のAmazon DynamoDBテーブルは、`UserId` をパーティションキー、`PostId` をソートキーとして構成されています。新しい機能追加に伴い、特定の `Category` に属する投稿を `CreatedAt` の新しい順に効率よく取得するアクセスパターンが必要になりました。強力な一貫性(Strongly Consistent Read)は求められていません。既存のテーブル構造を維持したまま、要件を満たす最適な構成はどれですか。
A既存テーブルにローカルセカンダリインデックス(LSI)を追加し、パーティションキーをUserId、ソートキーをCategoryに設定する。
LSIはパーティションキーがベーステーブルと同一である必要があり、またテーブルの新規作成時にしか定義できないため、既存テーブルに後から追加することは不可能です。
B既存テーブルにグローバルセカンダリインデックス(GSI)を追加し、パーティションキーをCategory、ソートキーをCreatedAtに設定する。
✓ 正解
GSIは運用中の既存テーブルに対して後からいつでも追加でき、ベーステーブルと異なるパーティションキーを設定できるため、新しいアクセスパターンへの対応に最適です。
Cテーブルをエクスポートして削除し、Categoryをパーティションキーとした新しいテーブルとして再作成したうえでデータを復元する。
GSIを追加するだけで既存のテーブル構造を維持したまま要件を満たせるため、ダウンタイムを伴うエクスポートおよびテーブル再作成の大掛かりな作業を行う必要はありません。
Dインデックスは作成せず、ScanオペレーションのFilterExpressionを使用してCategoryとCreatedAtの条件で動的に絞り込む。
Scan操作はテーブル内の全アイテムを読み込んだ後にフィルタリングを行うため、データ量が増加すると消費する読み込みキャパシティ(RCU)とレイテンシが劇的に悪化します。
解説
DynamoDBにおいて、既存のテーブルに対してベーステーブルとは全く異なる新しいパーティションキーとソートキーを指定したアクセスパターンを追加するには、グローバルセカンダリインデックス(GSI)を使用します。GSIはテーブル作成後でもいつでも動的に追加および削除が可能です。今回の要件では結果整合性が許容されているため、GSIの非同期レプリケーションの仕様にも完全に適合します。一方、ローカルセカンダリインデックス(LSI)はテーブル作成時にしか定義できません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →