我在 DDB 中存储了大约 780K(计数)个项目。
我正在调用 DynamoDBMapper.query(...) 方法来获取所有这些。结果很好,我可以得到所有的项目。但我花了 3 分钟才拿到它们。
从日志中,我看到 DynamoDBMapper.query(...) 方法正在尝试逐页获取项目,每个页面将请求对 DDB 的单独查询调用,每页大约需要 0.7 秒。我统计了所有返回的项目有 292 页,所以总时长约为 0.7*292=200s,这是不可接受的。我的代码基本上如下:
// 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());
那么如何在不分页的情况下一次获取所有项目。我的最终目标是减少查询持续时间。