[英]How to fetch large data in DynamoDB?
我需要檢查DynamoDB中特定表中的所有項目。
我的桌子上有一千萬個項目。 我試圖獲取所有內容,但由於太大而無法將它們插入列表。 我的目的是檢查所有項目,看看是否可以刪除它們。
這是示例掃描表代碼。 我不確定您是否有此代碼。
掃描API不能一次性提供所有記錄。 您必須遞歸執行掃描,直到LastEvaluatedKey
不為null才能獲取表中的所有項目。 您可以想象這類似於分頁輸出。 這樣,您無需一次掃描即可處理所有項目(即1000萬個項目)。 同樣,它也不會花費您的成本(即讀取容量單位)。
如果掃描的項目總數超過1 MB的最大數據集大小限制,掃描將停止,結果將作為LastEvaluatedKey值返回給用戶,以繼續進行后續操作。 結果還包括超出限制的項目數。 掃描可能導致沒有表數據符合過濾條件。
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);
}
}
不清楚 :-
我了解您想檢索所有項目並進行一些處理。 但是,我不確定為什么要插入列表。
如果分別處理每個掃描結果(即1MB數據),則可能不需要插入列表並使用堆內存。 顯然,無論采用哪種方法,它都需要更多的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.