【问题标题】:Dynamodb AWS Java scan withLimit is not workingDynamodb AWS Java 扫描 withLimit 不起作用
【发布时间】:2017-06-05 22:02:53
【问题描述】:

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

即使我使用 .withLimit(1) 即

List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1)); 

返回所有条目的列表,即 7. 我做错了吗?

附:我尝试使用 cli 进行此查询和

aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000 

只返回 1 个结果。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多