MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Вмъкване на големи CSV файлове в MongoDB с Node.js и async.queue

Трябва да имате работа с голям файл с потоци.

Ето едно възможно решение:

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

Моля, обърнете внимание:

  • че използваме API за поток на node-csv , което гарантира, че данните се обработват едновременно с четенето на файла:по този начин целият файл не се чете в паметта наведнъж. transform манипулатор се изпълнява за всеки запис;
  • че използваме async.queue , което е опашка за асинхронна обработка:най-много 5 манипулатора (finalcollection.insert ) се изпълняват паралелно.

Този пример трябва да се тества, тъй като не съм много сигурен, че се справя наистина добре с обратното налягане. Освен това нивото на паралелност на опашката трябва да се настрои към вашата специфична конфигурация.

Можете също да намерите работеща същност тук .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как мога да върна масив от обекти mongodb в pymongo (без курсор)? Може ли MapReduce да направи това?

  2. Създайте _id на поддокументи на mongoimport --jsonArray

  3. Как да организирате връзка много към много в MongoDB

  4. Има ли многоядрена експлоатираща NoSQL система?

  5. MongoDB $reverseArray