MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Chèn CSV lớn vào MongoDB với Node.js và async.queue

Bạn nên xử lý một tệp lớn bằng các luồng.

Đây là một giải pháp khả thi:

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

Xin lưu ý:

  • rằng chúng tôi sử dụng API luồng của node-csv , điều này đảm bảo rằng dữ liệu được xử lý cùng lúc khi tệp được đọc:theo cách này, toàn bộ tệp không được đọc trong bộ nhớ cùng một lúc. transform trình xử lý được thực thi cho mỗi bản ghi;
  • mà chúng tôi sử dụng async.queue , là hàng đợi xử lý không đồng bộ:tối đa 5 trình xử lý (finalcollection.insert ) được thực hiện song song.

Ví dụ này nên được thử nghiệm, vì tôi không thực sự chắc chắn rằng nó xử lý áp lực ngược thực sự tốt. Ngoài ra, mức đồng thời của hàng đợi phải được điều chỉnh theo cấu hình cụ thể của bạn.

Bạn cũng có thể tìm thấy ý chính hoạt động tại đây .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lọc mảng trong mongodb

  2. mongodb v3.2 không thể chạy trong mac

  3. Trong MongoDB, nếu bộ sưu tập bị loại bỏ, các chỉ mục cũng tự động giảm?

  4. MongoDB:Có thể sử dụng lại Data Store trong một Mongo Server khác không?

  5. Mongoose hết thời gian và ném ngoại lệ