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

MongoDB NodeJS प्रोसेस आउट ऑफ मेमोरी

यदि आपका MongoDB सर्वर 2.6 या नया है, तो बेहतर होगा कि आप राइट कमांड का उपयोग करें बल्क एपीआई जो बल्क इंसर्ट<के निष्पादन की अनुमति देता है /ए> ऑपरेशंस जो सर्वर के शीर्ष पर केवल एब्स्ट्रैक्शन हैं, जिससे बल्क ऑपरेशंस बनाना आसान हो जाता है। ये बल्क ऑपरेशन मुख्य रूप से दो फ्लेवर में आते हैं:

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

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

आपके मामले में, आप बल्क API इस तरह:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/course", function(err, db) {
    // Handle error
    if(err) throw err;

    // Get the collection and bulk api artefacts
    var col = db.collection('students'),
        types = ['exam', 'quiz', 'homework', 'homework'],
        bulk = col.initializeOrderedBulkOp(), // Initialize the Ordered Batch
        counter = 0;

    // Drop the collection
    col.drop();


    // Representing a long loop with 1 Million Records
    for (var i = 0; i < 1000000; i++) {
        var scores = [],
            class_id = 0,
            record = {};

        // Each student taking 10 classes
        for (var class_counter = 0; class_counter < 10; class_counter ++) {

            // Each Class has 4 grades
            // and each class has 4 grades
            for (var j = 0; j < 4; j++) {
                scores.push({ 'type': types[j], 'score': Math.random()*100 });
            }

            // there are 500 different classes that they can take
            class_id = Math.floor(Math.random() * 501); // get a class id between 0 and 500    

            record['student_id'] = i;
            record['scores'] = scores;
            record['class_id'] = class_id;
        }

        bulk.insert(record);            
        counter++;

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

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

-- अद्यतन करें-

डमी सामग्री उत्पन्न करने के लिए @MarkusWMahlberg को बधाई, आप पैकेज को आज़माना चाह सकते हैं mgenerate



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बहुत सारे JSON फ़ील्ड के साथ MongoDB बनाम MySQL का उपयोग करना?

  2. ClusterControl में अपने क्लस्टर टोपोलॉजी को विज़ुअलाइज़ करना

  3. MongoDB:उप-दस्तावेज़ अपडेट कर रहा है

  4. डेटाटाइम के साथ मोंगोडीबी/पायमोंगो क्वेरी

  5. Node.js - नेवले के साथ संबंध बनाना