MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara yang benar untuk memasukkan banyak catatan ke Mongodb dengan Node.js

Jika server MongoDB Anda adalah 2.6 atau lebih baru, akan lebih baik untuk memanfaatkan menggunakan perintah tulis API Massal yang memungkinkan eksekusi operasi penyisipan massal yang hanya abstraksi di atas server untuk memudahkan membangun operasi massal dan dengan demikian mendapatkan peningkatan kinerja dengan pembaruan Anda pada koleksi besar.

Mengirim operasi penyisipan massal dalam batch menghasilkan lebih sedikit lalu lintas ke server dan dengan demikian melakukan transaksi kawat yang efisien dengan tidak mengirim semuanya dalam pernyataan individual, melainkan memecah menjadi potongan yang dapat dikelola untuk komitmen server. Ada juga lebih sedikit waktu menunggu respons dalam panggilan balik dengan pendekatan ini.

Operasi massal ini datang terutama dalam dua rasa:

  • Operasi massal yang dipesan . Operasi ini menjalankan semua operasi secara berurutan dan kesalahan pada kesalahan penulisan pertama.
  • Operasi massal tidak berurutan . Operasi ini menjalankan semua operasi secara paralel dan mengumpulkan semua kesalahan. Operasi massal yang tidak berurutan tidak menjamin urutan eksekusi.

Catatan, untuk server yang lebih lama dari 2.6, API akan menurunkan konversi operasi. Namun tidak mungkin untuk menurunkan konversi 100% sehingga mungkin ada beberapa kasus tepi di mana ia tidak dapat melaporkan angka yang benar dengan benar.

Dalam kasus Anda, Anda dapat mengimplementasikan operasi penyisipan API Massal dalam kumpulan 1000 seperti ini:

Untuk MongoDB 3.2+ menggunakan bulkWrite

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/test';
var entries = [ ... ] // a huge array containing the entry objects

var createNewEntries = function(db, entries, callback) {

    // Get the collection and bulk api artefacts
    var collection = db.collection('entries'),          
        bulkUpdateOps = [];    

    entries.forEach(function(doc) {
        bulkUpdateOps.push({ "insertOne": { "document": doc } });

        if (bulkUpdateOps.length === 1000) {
            collection.bulkWrite(bulkUpdateOps).then(function(r) {
                // do something with result
            });
            bulkUpdateOps = [];
        }
    })

    if (bulkUpdateOps.length > 0) {
        collection.bulkWrite(bulkUpdateOps).then(function(r) {
            // do something with result
        });
    }
};

Untuk MongoDB <3.2

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/test';
var entries = [ ... ] // a huge array containing the entry objects

var createNewEntries = function(db, entries, callback) {

    // Get the collection and bulk api artefacts
    var collection = db.collection('entries'),          
        bulk = collection.initializeOrderedBulkOp(), // Initialize the Ordered Batch
        counter = 0;    

    // Execute the forEach method, triggers for each entry in the array
    entries.forEach(function(obj) {         

        bulk.insert(obj);           
        counter++;

        if (counter % 1000 == 0 ) {
            // Execute the operation
            bulk.execute(function(err, result) {  
                // re-initialise batch operation           
                bulk = collection.initializeOrderedBulkOp();
                callback();
            });
        }
    });             

    if (counter % 1000 != 0 ){
        bulk.execute(function(err, result) {
            // do something with result 
            callback();             
        }); 
    } 
};

Panggil createNewEntries() fungsi.

MongoClient.connect(url, function(err, db) {
    createNewEntries(db, entries, function() {
        db.close();
    });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB allowDiskUse tidak berfungsi..

  2. Bagaimana cara menguji unit metode yang terhubung ke mongo, tanpa benar-benar terhubung ke mongo?

  3. MongoDB Unclean Shutdown - Gagal diperbaiki

  4. Efisiensi saat memasukkan ke mongodb (pymongo)

  5. Kesalahan loopback:Diperlukan Otorisasi