MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Proses MongoDB NodeJS Kehabisan Memori

Jika server MongoDB Anda 2.6 atau yang lebih baru, akan lebih baik untuk memanfaatkan penggunaan perintah tulis API Massal yang memungkinkan eksekusi sisipan massal operasi yang hanya abstraksi di atas server untuk memudahkan membangun operasi massal. Operasi massal ini datang terutama dalam dua rasa:

  • Operasi massal yang dipesan . Operasi ini menjalankan semua operasi secara berurutan dan kesalahan pada kesalahan penulisan pertama.
  • Operasi massal tidak berurutan . Operasi ini menjalankan semua operasi secara paralel dan mengumpulkan semua kesalahan. Operasi massal yang tidak berurutan tidak menjamin urutan eksekusi.

Catatan, untuk server yang lebih lama dari 2.6, API akan menurunkan konversi operasi. Namun tidak mungkin untuk menurunkan konversi 100% sehingga mungkin ada beberapa kasus tepi di mana ia tidak dapat melaporkan angka yang benar dengan benar.

Dalam kasus Anda, Anda dapat menerapkan API Massal seperti ini:

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

-- PEMBARUAN --

Kudos to @MarkusWMahlberg, untuk menghasilkan konten dummy, Anda mungkin ingin mencoba paket mgenerate .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB, MapReduce dan sortir

  2. mongodb menerapkan sort ke hasil pencarian

  3. Bagaimana cara menghitung rata-rata tertimbang di mongoDB menggunakan kerangka kerja agregasi?

  4. Apakah ada sistem NoSQL yang mengeksploitasi multicore?

  5. Menyimpan skema JSON di mongodb dengan pegas