【问题标题】:AWS Scan ignores withLimit()AWS Scan 忽略 withLimit()
【发布时间】:2020-06-04 03:13:15
【问题描述】:

我正在尝试从 DynamoDB 表中获取项目以将它们放入 csv 文件中。以下是代码:

ArrayList<String> ids = new ArrayList<String>();
        ScanResult result = null;
        do{
            ScanRequest req = new ScanRequest();
            req.setTableName("table");
            req.withLimit(10);
            if(result != null){
                req.setExclusiveStartKey(result.getLastEvaluatedKey());
            }

              AmazonDynamoDBClient client = new AmazonDynamoDBClient(awsCreds);

            result = client.scan(req);

            List<Map<String, AttributeValue>> rows = result.getItems();

            for(Map<String, AttributeValue> map : rows){
                try{
                    AttributeValue v = map.get("prod_number");
                    String id = v.getS();
                    ids.add(id);
                } catch (NumberFormatException e){
                    System.out.println(e.getMessage());
                }
            }
        } while(result.getLastEvaluatedKey() != null);

        System.out.println("Result size: " + ids.size());

我想知道为什么'req.withLimit(10)' 对结果数没有影响。查询仍会尝试获取所有记录。

【问题讨论】:

  • 我想我明白了,限制是分页,而不是获取的结果数。

标签: amazon-dynamodb aws-java-sdk


【解决方案1】:

ScanRequestmeanslimit 属性:

要评估的最大项目数(不一定是匹配项目的数量)。如果 DynamoDB 在处理结果时处理的项目数达到了限制,它会停止操作并返回直到该点的匹配值,并在LastEvaluatedKey 中的一个键应用于后续操作,以便您可以拿起你离开的地方。此外,如果在 DynamoDB 达到此限制之前处理的数据集大小超过 1 MB,它会停止操作并返回匹配值达到限制,并在后续操作中应用 LastEvaluatedKey 中的键以继续操作。有关更多信息,请参阅 Amazon DynamoDB 开发人员指南中的 Working with Queries

因此,它只限制单个请求返回的部分数据的大小,而不是整个扫描操作。而且我看到您正在执行多个请求,因此您将获得更多数据。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2021-11-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多