1

Я в настоящее время использую DynamoDB потоки для обработки измененных значений коллекции с помощью лямбда-функций, однако в настоящее время я выполняю только два лямбда-экземпляра параллельно, что недостаточно для обработки всех входящих данных, а лямбда-функции просто находятся в очереди.Увеличьте количество осколков в DynamoDB, чтобы развернуть больше lambdas параллельно

От AWS документации Я могу видеть, что количество лямбды, которые могут выполняться параллельно, пропорционально количество осколков вашего DynamoDB:

Если вы создаете функцию Lambda, которая обрабатывает события из потока (потоки Amazon Kinesis Streams или DynamoDB), количество блоков в потоке является единицей параллелизма. Если в вашем потоке имеется 100 активных осколков, будет выполняться одновременно 100 Лямбда-функций . Затем каждая функция лямбда обрабатывает события на осколке в порядке их поступления.

Итак, мой вопрос: как увеличить количество осколков моего DynamoDB? Возможно ли это? Я не мог найти, как настроить его в настройках.

+0

Я считаю, что DynamoDB автоматически осколки на основе хеш-ключа, предполагая, что у вас есть настройка хэша и диапазона. – idbehold

ответ

0

Нет, его невозможно вручную контролировать количество осколков в DDB UpdateStream. DDB автоматически обрабатывает это для вас, создавая столько осколков, чтобы соответствовать входящей скорости обновлений.

Идеальные обновления, происходящие с вашей таблицей DDB, должны проходить через некоторый осколок (обновления, происходящие с одной и той же записью, всегда будут поступать в один и тот же осколок, означающий, что они разделены на основе вашего hashKey). Это ваш поток обновлений, который тоже в хронологическом порядке обновляет ту же запись в конце (или говорит в очереди) в том же осколке, что и конечный процессор обрабатывает их последовательно.

Каждый из них имеет собственную пропускную способность для ввода и вывода данных, если нет необходимости в увеличении количества осколков, поддерживаемых при приближении скорости обновления в таблице (что в случае потоков обновлений DDB является высокой степенью записи на вашей таблице, что текущее количество осколков не может быть обработано)

+0

Возможно, я что-то делаю неправильно, потому что мне кажется невероятно медленным. Я могу быстро записывать данные в БД, но для получения всех событий из потока может потребоваться гораздо больше времени, потому что он, как представляется, вызывает только одну лямбду за раз. Мой основной ключ раздела 'uuid()' для каждого элемента, поэтому я не понимаю, почему у него не было бы хорошего распределения осколков. Вы сказали: «DDB автоматически обрабатывает это для вас, создавая столько осколков, чтобы соответствовать входящей скорости обновлений». Но этот показатель слишком медленный, и я бы хотел, чтобы он автоматически создавал больше осколков :( –

+0

Для простоты я упомянул hashKey - это прямое картографирование осколков, на самом деле его немного больше, чем его собственный составный и параллельные обновления на таблице по составномуKey-распределению для балансировки нагрузки через осколки.Поэтому, если вы обновляете только несколько составных клавиш, и они попадают под один и тот же осколок, тогда они будут выполняться последовательно, а не параллельно. Точка множественная. Композитные клавиши могут попадать под один и тот же осколок и всю динамику, основанную на ваших распределениях клавиш и таблицы. DDB-потоки не обрабатывают параллельные обновления таблиц, а его обновляющая таблица обработки обновляется в порядке их появления. –

+0

Уточнение для «потоков DDB не является параллельной обработкой обновлений таблицы параллельно, обновляет таблицу обработки abt в порядке их появления». Обновления, поступающие один и тот же осколок обрабатывается последовательно (обновления в том же осколке находятся в хронологическом порядке), в то время как множественные осколки могут запускать lambdas параллельно, поскольку обновления в разных осколках независимы друг от друга. –