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

Hvordan kan jeg forbedre MongoDB bulk ydeevne?

Send bulkinsert-operationerne i batches, da dette resulterer i mindre trafik til serveren og dermed udfører effektive wire-transaktioner ved ikke at sende alt i individuelle opgørelser, men derimod bryde op i håndterbare bidder til serverforpligtelse. Der er også mindre tid til at vente på svaret i tilbagekaldet med denne tilgang.

En meget bedre tilgang til dette ville være at bruge async modul, så selv at sløjfe inputlisten er en ikke-blokerende operation. Valg af batchstørrelse kan variere, men at vælge batchindsættelsesoperationer pr. 1000 poster ville gøre det sikkert at forblive under 16 MB BSON hårde grænse, da hele "anmodningen" er lig med ét BSON dokument.

Det følgende demonstrerer brugen af ​​async modul, mens de gentager arrayet og gentagne gange kalder iteratorfunktionen, mens testen returnerer sand. Ringer tilbage, når den er stoppet, eller når der opstår en fejl.

var bulk = col.initializeOrderedBulkOp(),
    counter = 0,
    len = array.length,
    buildModel = function(index){   
        return {
            "data": array[index],
            "metaData": {
                "hash": hash,
                "date": timestamp,
                "name": name
            }
        }
    };

async.whilst(
    // Iterator condition
    function() { return counter < len },

    // Do this in the iterator
    function (callback) {
        counter++;
        var model = buildModel(counter);
        bulk.insert(model);

        if (counter % 1000 == 0) {
            bulk.execute(function(err, result) {
                bulk = col.initializeOrderedBulkOp();
                callback(err);
            });
        } else {
            callback();
        }
    },

    // When all is done
    function(err) {
        if (counter % 1000 != 0) {
            bulk.execute(function(err, result) {
                console.log("More inserts.");
            }); 
        }           
        console.log("All done now!");
    }
);



  1. Windows Docker mongo-beholder virker ikke med volumenmontering

  2. Hvordan erstatter man den forældede ScriptDb med Mongodb ved hjælp af URL Fetch-tjenesten?

  3. Brug af UUID'er i stedet for ObjectID'er i MongoDB

  4. 'mongorestore' genkendes ikke som en intern eller ekstern kommando, operativt program eller batchfil