sql >> Databáze >  >> NoSQL >> MongoDB

Proces MongoDB NodeJS nedostatek paměti

Pokud je váš server MongoDB verze 2.6 nebo novější, bylo by lepší využít možnosti zápisu Hromadné API které umožňují provedení hromadného vložení operace, které jsou jednoduše abstrakcemi nad serverem, aby bylo snadné vytvářet hromadné operace. Tyto hromadné operace přicházejí hlavně ve dvou příchutích:

  • Objednané hromadné operace . Tyto operace provedou všechny operace v pořadí a při první chybě zápisu dojde k chybě.
  • Neuspořádané hromadné operace . Tyto operace provádějí všechny operace paralelně a shromažďují všechny chyby. Neuspořádané hromadné operace nezaručují pořadí provedení.

Všimněte si, že u starších serverů než 2.6 API převede operace dolů. Není však možné převést dolů 100 %, takže se mohou vyskytnout okrajové případy, kdy nemůže správně hlásit správná čísla.

Ve vašem případě byste mohli implementovat Hromadné API takhle:

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

- AKTUALIZACE --

Čest @MarkusWMahlberg, pro generování fiktivního obsahu možná budete chtít vyzkoušet balíček mgenerate .



  1. Jak zabezpečit ClusterControl Server

  2. Spring RedisTemplate:Serializujte několik tříd modelu do JSON. Potřebujete použít více šablon RedisTemplates?

  3. Jak mohu spustit skript MongoDB js pomocí Java MongoDriver

  4. MongoDB:Použití $sample s ovladačem C#