使用Node.js从MSSQL到DynamoDB的数据传输

时间:2017-01-20 23:03:17

标签: sql-server node.js amazon-dynamodb

我尝试使用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的行数,则此代码可以正常工作。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:2)

问题是它试图一次将所有150,000条记录加载到内存中。您应该做的是调整查询以一次只请求部分数据集(页面)。有关如何在T-SQL中实现分页的SO有很多答案,但如果您使用的是新版本,this answer应该可以解决问题。也就是说,由您的代码决定有多少总记录并跟踪当前页面。