sql >> Database >  >> NoSQL >> MongoDB

MongoDB NodeJS-proces vol geheugen

Als uw MongoDB-server 2.6 of nieuwer is, is het beter om gebruik te maken van schrijfopdrachten Bulk-API waarmee de uitvoering van bulk insert operaties die eenvoudigweg abstracties zijn bovenop de server om het gemakkelijk te maken om bulkoperaties te bouwen. Deze bulkoperaties zijn er hoofdzakelijk in twee smaken:

  • Bulkoperaties besteld . Deze bewerkingen voeren alle bewerkingen in volgorde uit en geven een foutmelding bij de eerste schrijffout.
  • Ongeordende bulkbewerkingen . Deze bewerkingen voeren alle bewerkingen parallel uit en aggregeren alle fouten. Ongeordende bulkoperaties garanderen geen volgorde van uitvoering.

Let op, voor oudere servers dan 2.6 zal de API de bewerkingen naar beneden converteren. Het is echter niet mogelijk om 100% naar beneden te converteren, dus er kunnen enkele randgevallen zijn waarbij het niet correct de juiste cijfers kan rapporteren.

In jouw geval zou je de Bulk API zoals dit:

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();
        }); 
    } 
});

-- BIJWERKEN --

Een pluim voor @MarkusWMahlberg, voor het genereren van dummy-inhoud wil je misschien het pakket mgenerate .



  1. MongoDb met FastAPI

  2. Kan ik MongoDB configureren als In-Memory?

  3. In MongoDB gebruik ik een grote vraag, hoe ik een samengestelde index of een enkele index zal maken, dus mijn responstijd wordt verhoogd

  4. MongoDB Veel-op-veel-associatie