यदि आपका 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();
});
});