Читать все записи в DynamoDB с помощью задачи своевременного сканирования - PullRequest
0 голосов
/ 30 августа 2018

Скажем, у меня есть DynamoDB с достаточным количеством элементов, которые выдают исключение тайм-аута, когда я делаю сканирование с использованием этой базовой функции Lambda:

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = function (event, context) {

    var tableName = "TABLE_NAEM";

    var params = {
        TableName : tableName,
        "ReturnConsumedCapacity": "TOTAL"
    };

    var counter = 1;

    dynamodb.scan(params, function(err, data) {
        if (err) {
            context.done('error', 'reading ddb failed: ' + err);
        }

        data.Items.forEach(function(element) {
            console.log(counter + "- " + element.whatever.S);
            counter++;
        })
    });

};

Я хочу выполнить сканирование ВСЕХ элементов в Таблице, но не хочу вызывать Пик Чтения. Есть ли способ запустить эту лямбда-функцию как задачу, читая N элементы каждый T раз, пока все элементы не будут покрыты?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Таким образом, существуют разные подходы к решению этой проблемы, и я думаю, что перепробовал их все. Решение, предложенное @cementblocks, работает, но для такой небольшой проблемы это своего рода излишество, поскольку вам нужно обрабатывать все ошибки обратного вызова, а если порядок важен для вас, это ненадежный вариант.

В итоге я импортировал DynamoDB в Redshift. Это просто, надежно, и после импорта в Redshift вы можете выполнять все запросы, которые хотите.

Вот связанных документов на вики-странице AWS.

0 голосов
/ 31 августа 2018

Вы можете использовать шаговую функцию AWS, чтобы помочь управлять вашей лямбда-функцией. Шаговая функция AWS может спать между лямбда-вызовами. Ваша лямбда может вернуть LastEvaluatedKey и получить его в качестве параметра из функции шага.

...