Dynamodb AWS Java扫描withLimit无法正常工作

时间:2017-06-05 22:02:54

标签: java amazon-dynamodb aws-java-sdk

我正在尝试使用Java aws-sdk版本1.11.140的DynamoDBScanExpression withLimit为1

即使我使用.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个结果。

1 个答案:

答案 0 :(得分:0)

DynamoDBMapper.scan将返回PaginatedScanList - 当用户执行需要它们的操作时,按需加载分页结果。某些操作(例如size())必须获取整个列表,但在可能的情况下逐页延迟获取结果。

因此,DynamoDBScanExpression上设置的limit参数是每页要提取的最大项目数。

因此,在您的情况下,返回PaginatedList,当您执行PaginatedList.size时,它会尝试从Dynamodb加载所有项目,在每个页面上加载1个项目(每个页面是对DynamoDb的获取请求)直到它到达PaginatedList的末尾。

由于您只对第一个结果感兴趣,因此在不从Dynamo获取所有7个项目的情况下获得该结果的好方法是:

    Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator();
    if ( it.hasNext() ) {
        DomainObject dob = (DomainObject) it.next();
    }

使用上面的代码,只有第一个项目将从dynamodb中获取。

需要注意的是:DynamoDBQueryExpression中的limit参数仅用于分页目的。它是每页商品数量的限制,而不是可以请求的页数限制。