AWS扫描忽略withLimit()

问题描述 投票:0回答:1

我试图从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)'对结果的数量没有影响。查询仍然试图获取所有的记录,我想知道为什么'req.withLimit(10)'对结果的数量没有影响。

amazon-dynamodb aws-java-sdk
1个回答
0
投票

limit 的财产 ScanRequest 途径:

评估的最大项数(不一定是匹配项数)。如果DynamoDB在处理结果的同时,将项目数处理到极限,则停止操作,并返回截至该点的匹配值,并在 LastEvaluatedKey 来应用在后续的操作中,这样你就可以从你离开的地方开始。另外,如果在DynamoDB达到这个限制之前,处理的数据集大小超过了1 MB,它就会停止操作,并返回限制以内的匹配值,并且在 LastEvaluatedKey 在后续操作中应用,以继续操作。更多信息,请参见 使用查询亚马逊DynamoDB开发指南.

所以,它只限制了单次请求返回的一部分数据的大小,而不是整个扫描操作。而且我看你是在进行多次请求,所以你会得到更多的数据。

© www.soinside.com 2019 - 2024. All rights reserved.