sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB NodeJS-proces tør for hukommelse

Hvis din MongoDB-server er 2.6 eller nyere, ville det være bedre at bruge en skrivekommando Bulk API der giver mulighed for at udføre bulk-indsættelse operationer som blot er abstraktioner oven på serveren for at gøre det nemt at bygge bulk operationer. Disse bulkoperationer kommer hovedsageligt i to varianter:

  • Bestilte masseoperationer . Disse operationer udfører hele operationen i rækkefølge og fejl ud på den første skrivefejl.
  • Uordrede masseoperationer . Disse operationer udfører alle operationerne parallelt og samler alle fejlene. Uordnede masseoperationer garanterer ikke udførelsesrækkefølgen.

Bemærk, for ældre servere end 2.6 vil API'en nedkonvertere operationerne. Det er dog ikke muligt at nedkonvertere 100 %, så der kan være nogle randtilfælde, hvor den ikke kan rapportere de rigtige tal korrekt.

I dit tilfælde kunne du implementere Bulk API sådan her:

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

-- OPDATERING --

Kudos til @MarkusWMahlberg, for at generere dummy-indhold, kan du prøve pakken mgenerate .



  1. Hvordan henter man en værdi fra mongoDB efter dets nøglenavn?

  2. Fremtrædende træk ved MapReduce – Vigtigheden af ​​MapReduce

  3. Indstil lagerplacering for MongoDB installeret på AWS EC2 Instance til EBS-lager. Og hvordan gendanner jeg det, efter at forekomsten er stoppet/afsluttet?

  4. MongoDB nøglesøgning uden store og små bogstaver