Java 如何在DynamoDB中获取大数据?

Java 如何在DynamoDB中获取大数据?,java,list,amazon-dynamodb,Java,List,Amazon Dynamodb,我需要检查DynamoDB中特定表中的所有项目 我的表包含1000万项。 我试图把所有的都取出来,但我无法将它们插入列表,因为它太大了。 我的目的是检查所有项目,看看是否可以删除它们。这是扫描表代码示例。我不确定你是否有这个代码 扫描API不会一次性提供所有记录。您必须递归地执行扫描,直到LastEvaluatedKey不为null才能获取表中的所有项目。您可以想象这与分页输出类似。这样,您不需要在一次扫描中处理所有项目(即1000万个项目)。此外,它也不会花费您的成本(即读取容量单位) 如果扫

我需要检查DynamoDB中特定表中的所有项目

我的表包含1000万项。 我试图把所有的都取出来,但我无法将它们插入列表,因为它太大了。
我的目的是检查所有项目,看看是否可以删除它们。

这是扫描表代码示例。我不确定你是否有这个代码

扫描API不会一次性提供所有记录。您必须递归地执行扫描,直到
LastEvaluatedKey
不为null
才能获取表中的所有项目。您可以想象这与分页输出类似。这样,您不需要在一次扫描中处理所有项目(即1000万个项目)。此外,它也不会花费您的成本(即读取容量单位)

如果扫描的项目总数超过最大数据集大小 限制为1 MB时,扫描将停止并将结果返回给用户 LastEvaluatedKey值,用于在后续操作中继续扫描 活动结果还包括超过标准的项目数量 限制。扫描可能导致没有符合筛选条件的表数据

公共类扫描表{
公共静态void main(字符串[]args){
AmazonDynamoDB AmazonDynamoDB=AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(新的EndpointConfiguration(“http://localhost:8000“,“us-east-1”)。build();
ScanRequest ScanRequest=新的ScanRequest()。带有表名(“电影”);
Map lastKey=null;
做{
ScanResult ScanResult=amazonDynamoDB.scan(scanRequest);
List results=scanResult.getItems();
//你可以在这里得到结果
results.stream().forEach(System.out::println);
lastKey=scanResult.getLastEvaluatedKey();
scanRequest.setExclusiveStartKey(lastKey);
}while(lastKey!=null);
}
}
不清楚:-

我知道您想要检索所有项目并进行一些处理。然而,我不知道你们为什么要插入到列表中


如果单独处理每个扫描结果(即1MB数据),则可能不需要插入列表并使用堆内存。显然,无论采用何种方法,它都需要更多内存。

以下是扫描表代码示例。我不确定你是否有这个代码

扫描API不会一次性提供所有记录。您必须递归地执行扫描,直到
LastEvaluatedKey
不为null
才能获取表中的所有项目。您可以想象这与分页输出类似。这样,您不需要在一次扫描中处理所有项目(即1000万个项目)。此外,它也不会花费您的成本(即读取容量单位)

如果扫描的项目总数超过最大数据集大小 限制为1 MB时,扫描将停止并将结果返回给用户 LastEvaluatedKey值,用于在后续操作中继续扫描 活动结果还包括超过标准的项目数量 限制。扫描可能导致没有符合筛选条件的表数据

公共类扫描表{
公共静态void main(字符串[]args){
AmazonDynamoDB AmazonDynamoDB=AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(新的EndpointConfiguration(“http://localhost:8000“,“us-east-1”)。build();
ScanRequest ScanRequest=新的ScanRequest()。带有表名(“电影”);
Map lastKey=null;
做{
ScanResult ScanResult=amazonDynamoDB.scan(scanRequest);
List results=scanResult.getItems();
//你可以在这里得到结果
results.stream().forEach(System.out::println);
lastKey=scanResult.getLastEvaluatedKey();
scanRequest.setExclusiveStartKey(lastKey);
}while(lastKey!=null);
}
}
不清楚:-

我知道您想要检索所有项目并进行一些处理。然而,我不知道你们为什么要插入到列表中


如果单独处理每个扫描结果(即1MB数据),则可能不需要插入列表并使用堆内存。显然,无论采用何种方法,它都需要更多的内存。

什么是审查标准?它是否与表中的其他项目有依赖关系?我需要获取表中的所有项目所有行和列审查标准是什么?它是否与表中的其他项有依赖关系?我需要获取表中的所有项所有行和列
public class ScanTable {

    public static void main(String[] args) {

        AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
                .withEndpointConfiguration(new EndpointConfiguration("http://localhost:8000", "us-east-1")).build();

        ScanRequest scanRequest = new ScanRequest().withTableName("Movies");

        Map<String, AttributeValue> lastKey = null;

        do {

            ScanResult scanResult = amazonDynamoDB.scan(scanRequest);

            List<Map<String, AttributeValue>> results = scanResult.getItems();

            // You can get the results here
            results.stream().forEach(System.out::println);

            lastKey = scanResult.getLastEvaluatedKey();
            scanRequest.setExclusiveStartKey(lastKey);
        } while (lastKey != null);

    }
}