Статьи

Сканирование элементов DynamoDB с помощью Java

В предыдущих постах мы рассмотрели, как запросить базу данных DynamoDB
Запрос DynamoDB часть 1
Запрос DynamoDB Part2 .

Помимо выдачи запросов DynamoDB также предлагает функцию сканирования. Сканирование выполняет выборку всех элементов, которые могут быть у вас в таблице DynamoDB. Поэтому сканирование не требует никаких правил, основанных на нашем ключе раздела или ваших глобальных / локальных вторичных индексах. Сканирование предлагает фильтрацию на основе уже выбранных элементов и возвращение определенных атрибутов из выбранных элементов.

Приведенный ниже фрагмент выполняет сканирование таблицы логинов, добавляя фильтрацию и выбирая только поле электронной почты.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public List<String> scanLogins(Date date) {
 
        List<String> emails = new ArrayList<>();
 
 
        Map<String, String> attributeNames = new HashMap<String, String >();
        attributeNames.put("#timestamp", "timestamp");
 
 
        Map<String, AttributeValue> attributeValues = new HashMap<String, AttributeValue>();
        attributeValues.put(":from", new AttributeValue().withN(Long.toString(date.getTime())));
 
 
        ScanRequest scanRequest = new ScanRequest()
                .withTableName(TABLE_NAME)
                .withFilterExpression("#timestamp < :from")
                .withExpressionAttributeNames(attributeNames)
                .withExpressionAttributeValues(attributeValues)
                .withProjectionExpression("email");
 
        Map<String,AttributeValue> lastKey = null;
 
        do {
 
            ScanResult scanResult = amazonDynamoDB.scan(scanRequest);
 
            List<Map<String,AttributeValue>> results = scanResult.getItems();
            results.forEach(r->emails.add(r.get("email").getS()));
            lastKey = scanResult.getLastEvaluatedKey();
            scanRequest.setExclusiveStartKey(lastKey);
        } while (lastKey!=null);
 
        return emails;
    }

Перед использованием сканирования в приложении мы должны принять во внимание, что сканирование выбирает все элементы таблицы. Поэтому он имеет высокую стоимость как по расходам, так и по производительности. Кроме того, он может потреблять ваши ресурсы.
Лучше придерживаться запросов и избегать сканирования.

Вы можете найти исходный код на github .