Вы правы, Lambda A должен был бы выполнить сканирование / запрос монстров, который не масштабировался бы.
Один из способов сделать это, чтобы разделить элементы cron так, чтобы вы могли может вызывать несколько лямбд параллельно (то есть разветвлять работу) вместо одной (лямбда-А), чтобы каждый обрабатывал раздел (или набор разделов) вместо всего.
Как этого добиться зависит от того, как выглядит ваш текущий первичный ключ и как еще вы ожидаете запросить эти элементы. Вот одно из решений:
cronID | rangeKey | jobInfo | counter
1001 | 72_2020-05-05T13:58:00 | foo | 4
1002 | 99_2020-05-05T14:05:00 | bar | 42
1003 | 01_2020-05-05T14:05:00 | baz | 0
1004 | 13_2020-05-05T14:10:00 | blah | 2
1005 | 42_2020-05-05T13:25:00 | 42 | 99
Я добавил случайный префикс (00-99) к rangeKey, чтобы вы могли параллельно получать разные лямбда-выражения для разных наборов элементов на основе этого префикса.
В этом примере вы можете вызывать 100 лямбда-сообщений каждую минуту (типы «лямбда-А»), каждый из которых обрабатывает один набор префиксов. Или вы могли бы сказать, 5 лямбда, каждый из которых обрабатывает диапазон 20 префиксов. Вы можете даже динамически масштабировать количество лямбда-вызовов вверх и вниз в зависимости от нагрузки, без необходимости обновлять префиксы в ваших данных в таблице.
Поскольку эти лямбды в основном одинаковы, вы можете просто вызвать лямбду A необходимое количество раз, вводя соответствующий префикс (-ы) для каждого из них в качестве конфигурации.
РЕДАКТИРОВАТЬ
Повторное ограничение страницы в 1 МБ в вашем комментарии, вы получите LastEvaluatedKey
назад, если ваш запрос был ограничен. Ваша лямбда может выполнять запросы в al oop, передавая значение LastEvaluatedKey
обратно как ExclusiveStartKey
до тех пор, пока вы не получите все страницы результатов.
Вы все равно должны быть осторожны во время выполнения ( и перехват ошибок для повторения, так как это не атомы c), но раздувание ваших лямбд, как указано выше, будет влиять на время работы, если вы размахиваете достаточно широко.