DynamoDB响应缓慢

时间:2017-02-01 11:25:03

标签: amazon-web-services amazon-dynamodb

所以我的问题是DynamoDB需要相当长的时间来返回单个对象。我使用的是node.js和AWS docclient。奇怪的是它需要100毫秒到200毫秒才能选择"来自DB的单项。 反正有没有让它更快?

示例代码:

Interlocked.CompareExchange

lambda中这段简单代码的平均值是130ms。知道我能做些什么才能让它更快?用户表只有主分区键" id"和主键电子邮件的全局二级索引。当我从我的控制台尝试这个时,它需要更多的时间。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

你有warmed up your Lambda function吗?如果您只是临时运行它,而不是运行连续加载,运行它的容器上的function might not be available yet,那么可能需要额外的时间。支持或反驳这一理论的一种方法是查看GetItem API的延迟指标。最后,您可以尝试使用AWS X-Ray在堆栈中查找其他延迟点。

DynamoDB SDK也可能正在重试,增加了Lambda函数中的感知延迟。鉴于您的物品大约为10 KB,您可能会受到限制。您是否配置了足够的读取容量?您可以在表的DynamoDB控制台中验证读取延迟和读取限制指标。

答案 1 :(得分:1)

使用Lambda @ Edge时,我遇到了完全相同的问题。 DynamoDB的响应平均花费130-140ms,而DynamoDB的延迟图显示10-20ms的延迟。

通过禁用ssl,参数验证和convertResponseTypes,我设法将响应时间平均缩短到了30ms:

const docClient = new AWS.DynamoDB.DocumentClient({ 
  apiVersion: '2012-08-10',
  sslEnabled: false,
  paramValidation: false,
  convertResponseTypes: false
});

最可能的原因是lambda本身中的CPU /网络节流。查看器请求的Lambda @ Edge最多可以有128MB,这是一个非常慢的lambda。因此,禁用额外检查和SSL验证可以使事情变得更快。

如果您仅运行常规Lambda,则增加内存应该可以解决此问题。

答案 2 :(得分:0)

我知道这有点老了,但是对于现在发现这个问题的人:instantiation of the client can be extremely slow。尽管进行了快速本地测试,但是从同一区域和Elastic Beanstalk实例访问Dynamo DB的速度非常慢!

从单个客户端实例访问Dynamo可以显着提高速度。