我使用Lambda和DAX时出现问题。
在lambda中,没有Nodejs DAX clien,扫描平均时间是900ms但是如果我使用DAX,则它是4500ms。这很奇怪,因为如果我使用DAX,估计的时间会比以前短。
这是最新的代码。在这里,我只获得一条记录,但它仍然相同。 )
const AWS = require('aws-sdk');
const AmazonDaxClient = require('amazon-dax-client');
const config = require('../config.json');
AWS.config.update({
region: config.region,
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey
});
var dax = null;
var daxClient=null;
const daxConfig = {
endpoints:[config.daxEndpoints],
region:config.region
}
if(dax == null & daxClient == null) {
console.log('initialized');
dax = new AmazonDaxClient(daxConfig);
daxClient = new AWS.DynamoDB.DocumentClient({service: dax });
}
exports.main = function(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false
const params = {
TableName: "game_dev"
};
daxClient.scan(params, function(err, data) {
if (err) {
console.log(JSON.stringify(err));
} else {
console.log("Query succeeded.");
}
});
}
答案 0 :(得分:1)
AWS Lambda使用可重复使用的容器。在第一次加载时,它是一个"初始化的容器"。第二次加载,直到它刷新(4小时?)它重新使用初始化的容器。它甚至可能会根据工作量进行扩展。
您需要在代码中掌握的技巧是不要在每次调用时重新初始化DynamoDb客户端。此AWS链接详细介绍了它:AWS Best Practices on AWS Service Client Initialization
因此,对于您的情况,请在函数处理程序范围之外设置客户端变量dax和daxclient。在C#中,我将它们声明在处理程序的范围之外,然后在处理程序中初始化它们,如果它们为null。如果不为null,我跳过初始化和重用。不知道nodejs的最佳实践是什么。