DDB には約 780K(count) のアイテムが保存されています。
DynamoDBMapper.query(...) メソッドを呼び出して、それらすべてを取得しています。結果は良好です。すべてのアイテムを取得できます。しかし、それらを取得するのに3分かかりました。
ログから、DynamoDBMapper.query(...) メソッドがページごとに項目を取得しようとしていることがわかります。各ページは DDB への個別のクエリ呼び出しを要求し、ページごとに約 0.7 秒かかります。すべてのアイテムが 292 ページで返されたことを数えたので、合計の長さは約 0.7*292=200 秒であり、これは受け入れられません。私のコードは基本的に以下のようなものです:
// setup query condition, after filter the items count would be about 780K
DynamoDBQueryExpression<VendorAsinItem> expression = buildFilterExpression(filters, expression);
List<VendorAsinItem> results = new ArrayList<>();
try {
log.info("yrena:Start query");
DynamoDBMapperConfig config = getTableNameConfig();
results = getDynamoDBMapper().query( // get DynamoDBMapper instance and call query method
VendorAsinItem.class,
expression,
config);
} catch (Exception e) {
log.error("yrena:Error ", e);
}
log.info("yrena:End query. Size:" + results.size());
では、ページネーションなしですべてのアイテムを一度に取得するにはどうすればよいですか。私の最終的な目標は、クエリの所要時間を短縮することです。