Dynamodb AWS的Java扫描withLimit不工作
问题描述:
我想使用的1使用Java AWS-SDK版本1.11.140Dynamodb AWS的Java扫描withLimit不工作
的DynamoDBScanExpression withLimit即使我用.withLimit(1),即
List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1));
返回所有条目列表,即7。我做错了什么?
P.S.我试着用这个查询的cli和
aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000
只给我1个结果。
答
DynamoDBMapper.scan将返回PaginatedScanList - 当用户执行需要它们的操作时,按需加载分页结果。某些操作(如size())必须获取整个列表,但在可能的情况下会逐页获取结果。
因此,DynamoDBScanExpression上设置的limit
参数是每页要获取的最大项目数。
因此,在您的情况下,会返回一个PaginatedList,当您执行PaginatedList.size时,它会尝试从Dynamodb加载所有项目,每个页面加载1个项目(每个页面都是对DynamoDb的提取请求)它会到达PaginatedList的末尾。
,因为你只在第一个结果感兴趣,一个好方法,如果没有获取全部来自迪纳摩的7个项目是:
Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator();
if (it.hasNext()) {
DomainObject dob = (DomainObject) it.next();
}
与上面的代码中,只有第一项将取来自dynamodb。
带走的是:DynamoDBQueryExpression中的limit
参数仅用于分页目的。这是对每页项目数量的限制,而不是对可请求页面数量的限制。