MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wstawianie dużych plików CSV do MongoDB za pomocą Node.js i async.queue

Powinieneś mieć do czynienia z dużym plikiem ze strumieniami.

Oto możliwe rozwiązanie:

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

Uwaga:

  • że używamy strumienia API node-csv , co zapewnia, że ​​dane są przetwarzane w tym samym czasie, gdy plik jest odczytywany:w ten sposób cały plik nie jest odczytywany od razu w pamięci. transform procedura obsługi jest wykonywana dla każdego rekordu;
  • że używamy async.queue , która jest asynchroniczną kolejką przetwarzania:maksymalnie 5 programów obsługi (finalcollection.insert ) są wykonywane równolegle.

Ten przykład powinien zostać przetestowany, ponieważ nie jestem pewien, czy naprawdę dobrze radzi sobie z przeciwciśnieniem. Ponadto poziom współbieżności kolejki powinien być dostosowany do konkretnej konfiguracji.

Możesz także znaleźć tutaj .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. jak uzyskać maksymalną wartość pola w MongoDB

  2. Zaktualizuj wiele dokumentów i zwróć wszystkie zaktualizowane dokumenty

  3. MongoDB 2.4.1 jest już dostępny w ScaleGrid

  4. Konwersja DBObject do Java Object podczas pobierania wartości z MongoDB

  5. Nie można połączyć się z serwerem 127.0.0.1:27017