簡體   English   中英

如何在DynamoDB中獲取大數據?

[英]How to fetch large data in DynamoDB?

我需要檢查DynamoDB中特定表中的所有項目。

我的桌子上有一千萬個項目。 我試圖獲取所有內容,但由於太大而無法將它們插入列表。 我的目的是檢查所有項目,看看是否可以刪除它們。

這是示例掃描表代碼。 我不確定您是否有此代碼。

掃描API不能一次性提供所有記錄。 您必須遞歸執行掃描,直到LastEvaluatedKey不為null才能獲取表中的所有項目。 您可以想象這類似於分頁輸出。 這樣,您無需一次掃描即可處理所有項目(即1000萬個項目)。 同樣,它也不會花費您的成本(即讀取容量單位)。

如果掃描的項目總數超過1 MB的最大數據集大小限制,掃描將停止,結果將作為LastEvaluatedKey值返回給用戶,以繼續進行后續操作。 結果還包括超出限制的項目數。 掃描可能導致沒有表數據符合過濾條件。

掃描API

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM