【发布时间】:2021-01-24 04:12:32
【问题描述】:
我在 DDB 中存储了大约 780K(count) 个项目。
我正在调用 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());
那么如何在不分页的情况下一次获取所有项目。 我的最终目标是减少查询持续时间。
【问题讨论】:
-
可以使用do batch get代替查询。
标签: amazon-dynamodb dynamodb-mapper