从lambda函数对dynamodb的请求非常慢

use*_*521 21 amazon-web-services amazon-dynamodb aws-lambda

我在同一区域(us-east-1)有lambda函数和dynamo db表.在lambda函数中,我执行非常简单的查询:

params =
  TableName: 'users'
  Item:
    email:
      S: event.body.email
  ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)
Run Code Online (Sandbox Code Playgroud)

DynamoDB表中只有几行,电子邮件上有Hash Key,读取/写入吞吐量设置为5/5.

Lambda函数在~4秒内完成...这非常慢.难道我做错了什么?


我已经使用lambda函数的不同内存设置测试了我的函数(以前设置为128mb):

  • 256mb => ~2000ms
  • 512mb => ~1000ms
  • 1024mb => ~500ms
  • 1536mb => ~300ms

因此,似乎响应时间取决于内存(实际上在计算容量上,因为AWS会将其与内存一起扩展).仍然这很疯狂,因为要制作非常简单的REST API,我必须设置1536mb内存以使其"响应",而我的程序使用17mb!


嗯,另一方面,我已经计算出它会花费:

  • 使用128mb内存,每1百万4000毫秒请求8.32美元
  • 10.004 $每100毫秒300毫秒请求使用1536mb内存

所以我猜不是那么糟糕......

kix*_*orz 2

嗯,问题也可能与取消暂停该Lambda函数正在运行的容器有关。您可能还希望优化对象的初始化方式,这样它们就不会在每次调用函数时都重新初始化。

请参阅文章Lambda 中的容器重用

  • 我们刚刚开始使用 eu-west 的 AWS Lambdas 和 API Gateway,并且发现仅从最小的 Lambda 调用 putItem 就会出现同样严重的性能问题。我希望这个问题可以像OP一样得到解决,我不认为我们可以做太多其他事情来优化我们的代码...除非我们可以避免连接开销,尽管获取很好,这表明这不是问题。 (2认同)
  • @kixorz你是对的,我用谷歌搜索并找到了这个解决方案并尝试了3008 MB,性能提高了很多(6倍)。 (2认同)