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

मोंगोडब को अतुल्यकालिक रूप से 1 मिलियन रिकॉर्ड कैसे बचाएं?

यह विस्फोट हो गया क्योंकि आप अगले पुनरावृत्ति पर जाने से पहले एक एसिंक्रोनस कॉल के पूरा होने की प्रतीक्षा नहीं कर रहे हैं। इसका मतलब यह है कि आप अनसुलझे कार्यों का "स्टैक" बना रहे हैं जब तक कि यह कोई समस्या न हो। इस साइट का नाम फिर से क्या है? चित्र प्राप्त करें?

इसलिए "बल्क" के साथ आगे बढ़ने का यह सबसे अच्छा तरीका नहीं है सम्मिलन सौभाग्य से अंतर्निहित MongoDB ड्राइवर पहले ही इस बारे में सोच चुका है, पहले उल्लेखित कॉलबैक समस्या से अलग। वास्तव में एक "बल्क एपीआई" है। इसे पूरी तरह से बेहतर बनाने के लिए उपलब्ध है। और यह मानते हुए कि आपने पहले ही मूल ड्राइवर को db . के रूप में खींच लिया है वस्तु। लेकिन मैं केवल .collection . का उपयोग करना पसंद करता हूं मॉडल से एक्सेसर, और "async" सब कुछ स्पष्ट करने के लिए मॉड्यूल:

var bulk = Model.collection.initializeOrderedBulkOp();
var counter = 0;

async.whilst(
  // Iterator condition
  function() { return count < 1000000 },

  // Do this in the iterator
  function(callback) {
    counter++;
    var model = buildModel(counter);
    bulk.insert(model);

    if ( counter % 1000 == 0 ) {
      bulk.execute(function(err,result) {
        bulk = Model.collection.initializeOrderedBulkOp();
        callback(err);
      });
    } else {
      callback();
    }
  },

  // When all is done
  function(err) {
    if ( counter % 1000 != 0 ) 
        bulk.execute(function(err,result) {
           console.log( "inserted some more" );
        });        
    console.log( "I'm finished now" ;
  }
);

पूरा होने पर दोनों "एसिंक्रोनस" कॉलबैक विधियों का उपयोग करने में अंतर है, बल्कि केवल एक स्टैक का निर्माण करना है, बल्कि "बल्क ऑपरेशंस एपीआई" को नियोजित करना है ताकि 1000 प्रविष्टियों के बैच अपडेट स्टेटमेंट में सब कुछ सबमिट करके एसिंक्रोनस राइट कॉल को कम किया जा सके।

यह न केवल आपके स्वयं के उदाहरण कोड की तरह फ़ंक्शन निष्पादन का "एक स्टैक का निर्माण" करता है, बल्कि सभी को अलग-अलग बयानों में नहीं भेजकर कुशल "वायर" लेनदेन करता है, बल्कि सर्वर प्रतिबद्धता के लिए प्रबंधनीय "बैच" में तोड़ देता है ।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेस्टेड सरणी के भीतर केवल मिलान किए गए उप-दस्तावेज़ तत्वों को वापस करें

  2. MongoDB में एक तिथि से वर्ष प्राप्त करने के 6 तरीके

  3. क्या मोंगोडीबी गेटकोलेक्शन विधि पूरे संग्रह को रैम या संदर्भ में लोड करती है? सी#

  4. Meteor.js में, मैं दो विकास परियोजनाओं में एक ही Mongo उदाहरण का उपयोग कैसे करूंगा?

  5. MongoDB:क्या एकत्रीकरण का उपयोग करके मूल्य प्रवृत्ति का पता लगाने का कोई तरीका है?