sql >> Databáze >  >> NoSQL >> MongoDB

Vkládání velkých CSV do MongoDB s Node.js a async.queue

Měli byste se zabývat velkým souborem s proudy.

Zde je možné řešení:

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);
    };
});

Poznámka:

  • že používáme stream API node-csv , který zajišťuje, že data jsou zpracovávána současně s načítáním souboru:tímto způsobem není celý soubor načten v paměti najednou. transform handler se provede pro každý záznam;
  • že používáme async.queue , což je asynchronní fronta zpracování:maximálně 5 obslužných rutin (finalcollection.insert ) se provádějí paralelně.

Tento příklad by měl být otestován, protože si opravdu nejsem jistý, zda zvládá protitlak opravdu dobře. Také úroveň souběžnosti fronty by měla být přizpůsobena vaší konkrétní konfiguraci.

Můžete také najít funkční souhrn zde .




  1. Pokus o spuštění redis a resque plánovače v rámci úlohy rake

  2. Nelze se připojit k mongolab, Getting MongoError:auth failed

  3. Kontejner Windows Docker mongo nefunguje s připojením svazku

  4. Služba MongoDB ve Fedoře neběží