gab*_*jan 7 amazon-web-services amazon-dynamodb
所以我的问题是 DynamoDB 需要相当长的时间来返回单个对象。我正在使用 node.js 和 AWS docclient。奇怪的是,从数据库中“选择”单个项目需要 100 毫秒到 200 毫秒。有没有办法让它更快?
示例代码:
var AWS = require("aws-sdk");
var docClient = new AWS.DynamoDB.DocumentClient();
console.time("user get");
var params = {
TableName : 'User',
Key: {
"id": "2f34rf23-4523452-345234"
}
};
docClient.get(params, function(err, data) {
if (err) {
callback(err);
}
else {
console.timeEnd("user get");
}
});
Run Code Online (Sandbox Code Playgroud)
lambda 中这段简单代码的平均时间是 130 毫秒。知道我能做些什么来让它更快吗?用户表只有主分区键“id”和带有主键电子邮件的全局二级索引。当我从控制台尝试此操作时,它需要更多时间。
任何帮助都感激不尽!
我在使用 Lambda@Edge 时遇到了完全相同的问题。来自 DynamoDB 的响应平均需要 130-140 毫秒,而 DynamoDB 延迟图显示了 10-20 毫秒的延迟。
通过禁用 ssl、参数验证和 convertResponseTypes,我设法将响应时间平均缩短到约 30 毫秒:
const docClient = new AWS.DynamoDB.DocumentClient({
apiVersion: '2012-08-10',
sslEnabled: false,
paramValidation: false,
convertResponseTypes: false
});
Run Code Online (Sandbox Code Playgroud)
问题的原因很可能是 lambda 本身的 CPU/网络节流。用于查看器请求的 Lambda@Edge 最多可以有 128MB,这是一个非常慢的 lambda。因此禁用额外检查和 SSL 验证使事情变得更快。
如果您只运行常规 Lambda,增加内存应该可以解决问题。
您预热了 Lambda 函数吗?如果您只是临时运行它,而不是运行连续负载,则该功能可能在运行它的容器上尚不可用,因此可能需要额外的时间。支持或反驳这一理论的一种方法是查看 GetItem API 的延迟指标。最后,您可以尝试使用AWS X-Ray来查找堆栈中的其他延迟点。
DynamoDB SDK 也可能会重试,从而增加您在 Lambda 函数中感知到的延迟。鉴于您的项目约为 10 KB,您可能会受到限制。您是否配置了足够的读取容量?您可以在 DynamoDB 控制台中验证表的读取延迟和读取限制指标。
归档时间: |
|
查看次数: |
6306 次 |
最近记录: |