sql >> Database teknologi >  >> NoSQL >> MongoDB

Indsættelse af store CSV'er i MongoDB med Node.js og async.queue

Du bør håndtere en stor fil med streams.

Her er en mulig løsning:

var queue = async.queue(collection.insert.bind(collection), 5);

csv()
.from.path('./input.csv', { columns: true })
.transform(function (data, index, cb) {
    queue.push(data, function (err, res) {
        if (err) return cb(err);
        cb(null, res[0]);
    });
})
.on('error', function (err) {
    res.send(500, err.message);
})
.on('end', function () {
    queue.drain = function() {
        res.send(200);
    };
});

Bemærk venligst:

  • at vi bruger stream-API'et for node-csv , som sikrer, at dataene behandles samtidig med, at filen læses:på denne måde læses hele filen ikke i hukommelsen på én gang. transform handler udføres for hver post;
  • at vi bruger async.queue , som er en asynkron behandlingskø:højst 5 behandlere (finalcollection.insert ) udføres parallelt.

Dette eksempel bør testes, da jeg ikke rigtig er sikker på, at den håndterer modtryk rigtig godt. Samtidig skal køens samtidighedsniveau justeres til din specifikke konfiguration.

Du kan også finde en arbejdsindsats her .




  1. MongoDB indlejrede objektaggregeringsoptælling

  2. mongodb:brug indlejret dokument eller separate samlinger med referencer

  3. hvordan får man Python Mongo Aggregate til at forklare ved hjælp af db.command?

  4. Hvordan bruger man pollingThrottle og pollingInterval?