performance - node app not working while mongodb is inserting -


i'm still learning mongodb , node.js.

i trying insert bulk amount of data 100k rows 80-100 columns. created app using express.js that. coded in such a way page redirects page once upload button clicked , in background app inserts data db.

the issue once inserting starts app stops responding. after completion of insert app slower 2-3 minutes.

i tried code on

1

  • fedora 14
  • intel p4 2.80ghz
  • 1.5gib

2

  • fedora 14
  • i3 3.20ghz
  • 3gib

how avoid problem? work better on better system?

code store data

mongoclient.connect(mongodb_uri, function (err, database) {     var collection = database.collection(collectionname);     (index = 0; index < jsonresult.length; ++index) {         var obj = jsonresult[index];         (var prop in obj) {             if (headers[prop] == 'date') {                 obj[prop] = new date(obj[prop].replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));             } else if (headers[prop] == 'integer') {                 obj[prop] = parseint(obj[prop]);             } else if (headers[prop] == 'float') {                 obj[prop] = parsefloat(obj[prop]);             }         }         collection.insert(obj, function (err, result) {             if (err) {                 console.log(json.stringify(err));             }         });         } }); 

note:

  • jsonresult result of reading file(csv) , converting json
  • headers object have key-data type mapping

    var headers = { 'iodate': 'date', 'sno': 'integer', 'salary': 'float' }

code read , convert csv json

var cv_json = require('convert-json'); // required module convert-json (convert-csv,xls,xlsx json) cv_json({     input: target_path,     output: null }, function (err, result) {     if (err) {         console.error(err);     } else {         persists(req, res, result, collectionname, headers);  //function insert takes place.     } }) 

right now, "persists()" return imidiately, though insert hasn't finished. due asyncronus nature of javascript/nodejs.

you need serialize insert operations don't clog server. use async.eachseries()

your "persists" function should use callback notify caller has finished. somehing this:

persists(req, res, result, collectionname, headers, callback){     mongoclient.connect(mongodb_uri, function (err, database) {         var collection = database.collection(collectionname);         async.eachseries(jsonresult,              function(obj, cb){                 (var prop in obj) {                     if (headers[prop] == 'date') {                         obj[prop] = new date(obj[prop].replace(/(\d{2})-(\d{2})-(\d{4})/,"$2/$1/$3"));                     } else if (headers[prop] == 'integer') {                         obj[prop] = parseint(obj[prop]);                     } else if (headers[prop] == 'float') {                         obj[prop] = parsefloat(obj[prop]);                     }                 }                 collection.insert(obj, function (err, result) {                     cb(err);                 });                                 },              function(err){                 callback();             }         );     }); } 

and use

persists(req, res, result, collectionname, headers, function(){     console.log("insert finished"); }); 

Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -