2017-01-20 2 views
1

Я пытаюсь передать данные с сервера SQL в DynamoDb с помощью Node.jsПередача данных из MSSQL в DynamoDB с помощью Node.js

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 и я думаю, что я это делаю неправильно. У меня 150000 тысяч записей в моей таблице sql.

Процесс использует много памяти, и я получаю кучу Javascript из памяти. Я проверил Провиденную пропускную способность моей таблицы динамо и установил ее до 4000 записей в секунду. Если я уменьшу количество строк, исходящих из SQL, этот код отлично работает.

Любая помощь или совет будут очень признательны.

+0

Я полностью признаю, что это был не ваш вопрос, но, возможно, узел не лучший инструмент для работы. Вы можете посмотреть специализированное программное обеспечение ETL (ETL = Извлечь Transform Load. Просто придирчивый разговор для перемещения большого количества данных). – Xedni

ответ

2

Проблема заключается в том, что он пытается загрузить сразу все 150 000 записей. Что вам нужно сделать, так это настроить ваш запрос, чтобы запросить только части набора данных сразу (страницы). На SO есть несколько ответов относительно того, как реализовать пейджинг в T-SQL, но если вы используете новую версию, this answer должен сделать трюк. Тем не менее, это будет до вашего кода, чтобы выяснить, сколько всего записей есть и отслеживать текущую страницу.

+0

Хорошо, я должен был понять, но я прыгал по более легкому пути :) – Theo