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

DynamoDBテーブルで、各ユーザーの注文履歴を注文日時順に取得したいと考えています。ユーザーIDごとにデータをグループ化し、新しい注文から順に取得できる設計として最も適切なものはどれですか。

A
パーティションキーをuserId、ソートキーをorderDateとする
✓ 正解
ユーザーごとにデータがまとまり、同じユーザー内では注文日時順に並ぶため、Queryだけで効率良く履歴を取得できます。典型的な設計です。
B
パーティションキーをorderDate、ソートキーをuserIdとする
注文日時でデータが分散されるため、特定ユーザーの注文を取得するには多数のパーティションを検索する必要があり非効率です。
C
パーティションキーをorderIdのみとし、Scanで並べ替える
Scanは全データを読み取ってから並べ替えるため、データ量が増えるとレイテンシとRCU消費が大きくなります。
D
パーティションキーをuserIdのみとし、FilterExpressionで日時順に取得する
ソートキーが存在しないため日時順で保存されません。FilterExpressionは検索後に適用されるため並び順は保証されません。

解説

パーティションキーはデータの分散とグループ化に使用され、ソートキーは同一パーティション内での並び順を決定します。そのため、ユーザーごとに注文履歴を時系列で取得するにはuserIdをパーティションキー、orderDateをソートキーとする設計が最適です。orderDateをパーティションキーにするとユーザー単位の検索効率が悪化します。また、ScanやFilterExpressionは不要な読み取りが増え、DynamoDB本来の高速なキー検索を活用できません。

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

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

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