DVAAWSのサービスを使用した開発
Amazon DynamoDBテーブルに対してQuery操作を実行するアプリケーションを開発しています。特定のパーティションキーに対するアイテム数が非常に多く、1回のQueryリクエスト(1MBの制限)ですべてのデータを取得しきれないことが判明しました。残りの結果(ページネーションされたデータ)を取得するために、開発者はどのようにAPIリクエストを構成すべきですか。
A前回のQueryのレスポンスに含まれる `LastEvaluatedKey` の値を、次回のQueryリクエストの `ExclusiveStartKey` に設定して送信する。
✓ 正解
ページネーション処理の基本であり、前回の LastEvaluatedKey を次の ExclusiveStartKey に渡すことで、中断した位置から続きのデータを取得できます。
BQueryリクエストの `Limit` パラメータを増やして、テーブルの最大容量まで一度に取得できるように変更する。
Limitパラメータは取得するアイテムの最大「数」を制限するものであり、1MBのデータサイズ上限を突破して全データを一度に取得することはできません。
C前回のQueryリクエストの `Count` パラメータの値を、次回のQueryリクエストの `Offset` パラメータに指定する。
DynamoDBのQueryやScanのAPIには、SQLのような行番号を指定する Offset パラメータは存在しません。
DQuery操作の代わりにScan操作を使用し、`FilterExpression` を適用することで一括で結果を取得する。
Scan操作はテーブル全体をフルスキャンするため極めて非効率であり、1MBのサイズ上限はScanでも同様に存在するため根本的な解決になりません。
解説
DynamoDBのQueryやScanオペレーションは、1回の実行で転送・取得できるデータサイズの上限が1MBに制限されています。取得結果が1MBを超える場合、レスポンスには次のデータが存在することを示す `LastEvaluatedKey` が含まれます。残りのデータを取得するには、後続のAPIリクエストでこの `LastEvaluatedKey` の値を `ExclusiveStartKey` パラメータとして指定して再呼び出し(ページネーション)を行う必要があります。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →