У меня есть лямбда-функция и таблица динамо-db в том же регионе (us-east-1). В лямбда-функции я выполняю очень простой запрос:Очень медленные запросы к dynamodb от лямбда-функции
params =
TableName: 'users'
Item:
email:
S: event.body.email
ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)
Есть только несколько строк в таблице DynamoDB, есть Hash ключ на адрес электронной почты и чтения/записи throughtputs настроены на 5/5.
Лямбда-функция exeutes в ~ 4 секунды ... Это очень медленно. Я делаю что-то неправильно?
Я проверил свою функцию с различными настройками памяти для лямбда-функции (он был установлен в 128MB ранее):
- 256mb => ~ 2000 мс
- 512mb => ~ 1000мс
- 1024MB => ~ 500мс
- 1536mb => ~ 300мс
Таким образом, кажется, что время отклика зависит от 1-1 по памяти (ну, по сути, на вычислительной мощности, поскольку AWS масштабирует ее вместе с памятью). Тем не менее это сумасшествие, потому что для создания очень простого REST API я должен установить память 1536mb, чтобы сделать его «отзывчивым», в то время как моя программа использует 17mb!
Хмм с другой стороны, я подсчитал, что это будет стоить:
- 8,32 $ за 1 Milion 4000ms запросов с использованием 128МБ памяти
- 10,004 $ за 1 Milion 300мс запросов с использованием 1536mb памяти
так что это не так плохо, я думаю ...
Вы уверены, что вы больше не используете что-то в своей лямбда-функции? Простому JS-вызову не нужно столько памяти и не нужно тратить много времени. – Guy
Просто для сравнения, какую производительность вы получаете, если попадете в SimpleDB? –