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