【发布时间】:2018-03-15 19:01:49
【问题描述】:
我在使用 Lambda 和 DAX 时遇到问题。
在 lambda 中,如果没有 Nodejs DAX 客户端,扫描平均时间为 900 毫秒,但如果我使用 DAX,则为 4500 毫秒。这很奇怪,因为如果我使用 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.");
}
});
}
【问题讨论】:
-
您为 Lambda 分配了多少 MB?只需检查您的平均评论,如果您一个接一个地调用 DynamoDb 调用是否需要 4500 毫秒?如果是这样,我可以查看整个 Lambda 函数吗?我很好奇的是您是否在每次调用时都实例化 DynamoDb 客户端,或者您是否正在初始化 DynamoDb 调用一次,然后每次调用都重用已经初始化的客户端...
-
感谢您的回复。我将附上整个代码。
-
128MB 内存用于 lambda。这是我使用的代码。是的。你是对的,它每次都通过 API Gateway 调用。如果您有任何想法,请帮助我。
-
你好@Zaxxon,我怎样才能在每次调用时重用已经初始化的客户端?请让我知道该怎么做。谢谢
-
进一步查看您的代码,“扫描”调用是一个缓慢的调用。 “扫描”的作用类似于“表扫描”,这意味着它将触及表中的每条记录。我建议使用“查询”,您可以通过“主分区键”进行查询。如果您需要按“主分区键”以外的字段进行搜索,您应该考虑其他选项,例如 ElasticSearch 等。您要做什么?是否允许用户在 game_dev 中的任何字段上进行搜索?
标签: node.js lambda aws-lambda dax