MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Node.js . के साथ Mongodb में कई रिकॉर्ड डालने का सही तरीका

यदि आपका MongoDB सर्वर 2.6 या नया है, तो बेहतर होगा कि आप राइट कमांड का उपयोग करें बल्क एपीआई जो बल्क इंसर्ट ऑपरेशंस के निष्पादन की अनुमति देता है जो कि सर्वर के शीर्ष पर केवल एब्स्ट्रैक्शन हैं जिससे बल्क ऑपरेशंस बनाना आसान हो जाता है और इस प्रकार बड़े संग्रह पर आपके अपडेट के साथ परफॉर्मेंस लाभ प्राप्त होता है।

बैचों में बल्क इंसर्ट ऑपरेशंस भेजने से सर्वर पर कम ट्रैफिक आता है और इस प्रकार सभी को अलग-अलग स्टेटमेंट में नहीं भेजकर कुशल वायर ट्रांजेक्शन करता है, बल्कि सर्वर प्रतिबद्धता के लिए प्रबंधनीय विखंडू में टूट जाता है। इस दृष्टिकोण के साथ कॉलबैक में प्रतिक्रिया के लिए प्रतीक्षा करने में भी कम समय लगता है।

ये बल्क ऑपरेशन मुख्य रूप से दो फ्लेवर में आते हैं:

  • थोक संचालन का आदेश दिया . ये ऑपरेशन सभी ऑपरेशन को क्रम में निष्पादित करते हैं और पहली राइट एरर पर एरर आउट करते हैं।
  • अनियंत्रित थोक संचालन . ये ऑपरेशन सभी ऑपरेशनों को समानांतर में निष्पादित करते हैं और सभी त्रुटियों को जोड़ते हैं। अनियंत्रित थोक संचालन निष्पादन के आदेश की गारंटी नहीं देता है।

ध्यान दें, पुराने सर्वरों के लिए 2.6 से अधिक के लिए एपीआई संचालन को कम कर देगा। हालांकि 100% को कम करना संभव नहीं है, इसलिए कुछ किनारे के मामले हो सकते हैं जहां यह सही संख्या की सही रिपोर्ट नहीं कर सकता है।

आपके मामले में, आप इस तरह 1000 के बैचों में बल्क एपीआई इंसर्ट ऑपरेशन को लागू कर सकते हैं:

मोंगोडीबी 3.2+ के लिए 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
        });
    }
};

मोंगोडीबी के लिए <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();             
        }); 
    } 
};

createNewEntries() पर कॉल करें समारोह।

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. एक सरणी के भीतर एक दस्तावेज़ को हटाने (खींचने) नेवला, ObjectID के साथ काम नहीं करता है

  2. जावास्क्रिप्ट निष्पादन mongoHQ शेल से कनेक्ट होने में विफल रहा

  3. MongoDB समुच्चय () - त्रुटि लेखन त्रुटि:अपरिभाषित की 'प्रत्येक के लिए' विधि को कॉल नहीं कर सकता

  4. MongoError को संभालने का अच्छा तरीका:सर्वर इंस्टेंस पूल नष्ट हो गया था

  5. आप NoSql डेटाबेस में ग्राहक> ऑर्डर> ऑर्डरम> उत्पाद को कैसे मॉडल करेंगे?