现在我在文档客户端上使用Dynamodb的put方法存在这个问题。当我运行我的程序时,put方法被注释掉,内存从70MB开始,跳到90MB,然后继续稳定到大约65MB。没有注释掉我的程序的内存,跳到90MB并且不断增长。
var params;
for (var i = 0; i < tuples.length; i++){
if(tuples[i][1] != ""){
params = {
TableName: "wordTable2",
Item:{
"word":tuples[i][1],
"url":tuples[i][0],
"info":tuples[i][2]
}
};
var dynamobd = new AWS.DynamoDB.DocumentClient();
dynamobd.put(params, function(err, data){
//if(err) console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
//else console.log("Added item:", JSON.stringify(data, null, 2));
});
dynamobd = null;
delete dynamobd;
}
//console.log(tuples[i][0] + " " + tuples[i][1] + " " + tuples[i][2]);
}
delete params;
delete bodyText;
delete holder;
delete tuples;
我不知道如何制作一个有效的循环来将所有项目添加到parmas上。如果我能做到这一点,我只需要为每个URL发送一个put方法,而不是每个可能有帮助的单词。我还尝试在参数中加入多个项目,多达10个,但这似乎没什么区别。
答案 0 :(得分:0)
它可能与在循环中实例化AWS.DynamoDB.DocumentClient()
有关。尝试移动for
循环之外 - 正好在var params;
之下,应该没问题。 (显然也删除了两行nulling并删除了dynamodb对象)
如果这没有帮助,请查看DynamoDB batchWriteItem
方法。听起来你可能会从这种方法中受益。
答案 1 :(得分:0)
我没有任何问题地使用DynamoDB api,但是在我的代码中,John Veldboom提到的内容是你正在进行的内存管理。我要做的第一件事是尽早声明并初始化您的DynamoDB客户端,而不是再次。它只是一个HTTP休息客户端。您可以将其与其他require('.....')
依赖项
我还会将所有删除命令和变量赋值删除为null。你的for循环在它遍历每个命令时完成,但不一定在每个DynamoDB返回后,因为这些回调是异步触发的。
var dynamobd = new AWS.DynamoDB.DocumentClient();
var params;
for (var i = 0; i < tuples.length; i++){
if(tuples[i][1] != ""){
params = {
TableName: "wordTable2",
Item:{
"word":tuples[i][1],
"url":tuples[i][0],
"info":tuples[i][2]
}
};
dynamobd.put(params, function(err, data){
if(err) console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
else console.log("Added item:", JSON.stringify(data, null, 2));
});
}
console.log(tuples[i][0] + " " + tuples[i][1] + " " + tuples[i][2]);
}
//Your for loop is done but that does not mean all the DynamoDB callbacks have returned yet.