所以我的问题是DynamoDB需要相当长的时间来返回单个对象。我使用的是node.js和AWS docclient。奇怪的是它需要100毫秒到200毫秒才能选择"来自DB的单项。 反正有没有让它更快?
示例代码:
Interlocked.CompareExchange
lambda中这段简单代码的平均值是130ms。知道我能做些什么才能让它更快?用户表只有主分区键" id"和主键电子邮件的全局二级索引。当我从我的控制台尝试这个时,它需要更多的时间。
非常感谢任何帮助!
答案 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可以显着提高速度。