sql >> データベース >  >> NoSQL >> MongoDB

MongoDBNodeJSプロセスのメモリ不足

    MongoDBサーバーが2.6以降の場合は、書き込みコマンドを使用することをお勧めします バルクAPI 一括挿入<の実行を可能にします/ a> 一括操作を簡単に構築できるようにするための、サーバー上での単なる抽象化である操作。これらの一括操作には、主に2つの種類があります。

    • 注文された一括操作 。これらの操作はすべての操作を順番に実行し、最初の書き込みエラーでエラーになります。
    • 順序付けられていない一括操作 。これらの操作は、すべての操作を並行して実行し、すべてのエラーを集約します。順序付けされていない一括操作は、実行の順序を保証するものではありません。

    2.6より古いサーバーの場合、APIは操作をダウンコンバートすることに注意してください。ただし、100%ダウンコンバートすることはできないため、正しい数値を正しく報告できないエッジケースが発生する可能性があります。

    あなたの場合、 BulkAPI> このように:

    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. nodejsを介してmongodbからデータを取得し、htmlページに表現する

    4. MongoDBが等しくない