2015-08-28 169 views
18

我在同一区域(us-east-1)中有lambda函数和dynamo db表。在lambda函数正进行非常简单的查询:从lambda函数对dynamodb的请求非常缓慢

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

只有在DynamoDB表几排,对电子邮件和读/写throughtputs散列键设置为5/5。

Lambda函数在〜4秒内执行......这非常慢。难道我做错了什么?


我测试过我与lambda函数不同的内存设置功能(它被设置为先前128MB):

  • 256MB =>〜2000毫秒
  • 512MB =>〜1000毫秒
  • 1024MB =>〜500ms的
  • 1536MB =>〜300ms的

因此,似乎响应时间取决于内存的1-1(事实上,随着AWS随着内存的扩大而增加计算容量)。仍然这是疯狂的,因为要制作非常简单的REST API,我必须设置1536mb内存,使其“响应”,而我的程序使用17mb!


嗯上我已经计算过它会花费另一方面:

  • $ 8.32每1个畅想4000ms请求使用
  • 10.004 $每1个畅想300ms的请求,128MB内存采用1536MB内存

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

+0

你确定你没有在你的Lambda函数中做其他任何事吗?简单的JS调用应该不需要那么多的内存,并且不应该花费那么多时间。 – Guy

+0

只是为了比较,如果你打SimpleDB,你会得到什么样的表现? –

回答

2

好了,问题可能在也可能与不停止运行Lambda函数的容器有关。您也可能希望优化初始化对象的方式,以便每次调用该函数时都不会重新初始化。

查看文章Container reuse in Lambda

+0

有趣。但是我所做的只是需要'aws-sdk'模块并向数据库发送请求。我也试着一个接一个地提出许多请求,以确保容器被重用... – user606521

+0

你描述的延迟非常大。它也可能是'us-east-1'高度利用地区。 – kixorz

+0

我会尝试在其他地区部署功能。 – user606521