我尝试使用Node.js将数据从SQL服务器传输到DynamoDb
sql.connect(config, function (err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query('SELECT Client, Brand FROM Client WHERE Brand = 6',
function (err, recordset) {
if (err) console.log(err);
console.log('request exectued');
var itemProcessed = 0;
// send records as a response
recordset.forEach(function (record) {
var params = {
TableName: 'ClientBrandLookUp',
Item: {
'ClientID': record.Client,
'Brand': record.Brand
}
};
docClient.put(params, function (err, data) {
if (err) {
console.log(err);
} else {
console.log('Added');
itemProcessed++;
if (itemProcessed === recordset.length) { alldone(); }
}
});
});
});
});
我是Node.js的新手,我想我做错了。 我的sql表中有150000条记录。
这个过程正在使用大量内存,而且我的Javascript堆内存不足。 我检查了我的发电机表的预配通量,并将其设置为每秒4000次写入。 如果我减少来自SQL的行数,则此代码可以正常工作。
非常感谢任何帮助或建议。
答案 0 :(得分:2)
问题是它试图一次将所有150,000条记录加载到内存中。您应该做的是调整查询以一次只请求部分数据集(页面)。有关如何在T-SQL中实现分页的SO有很多答案,但如果您使用的是新版本,this answer应该可以解决问题。也就是说,由您的代码决定有多少总记录并跟踪当前页面。