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参数仅用于分页目的。这是对每页项目数量的限制,而不是对可请求页面数量的限制。