sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik de bulkprestaties van MongoDB verbeteren?

Verzend de bulk-invoegbewerkingen in batches, omdat dit resulteert in minder verkeer naar de server en dus efficiënte overboekingstransacties uitvoert door niet alles in afzonderlijke overzichten te verzenden, maar eerder op te splitsen in hanteerbare brokken voor serververplichting. Er is ook minder tijd om te wachten op het antwoord in de callback met deze aanpak.

Een veel betere benadering hierbij zou het gebruik van de async zijn module, dus zelfs het herhalen van de invoerlijst is een niet-blokkerende bewerking. Het kiezen van de batchgrootte kan variëren, maar het selecteren van batch-invoegbewerkingen per 1000 items zou het veilig maken om onder de 16 MB BSON harde limiet te blijven, aangezien het hele "verzoek" gelijk is aan één BSON-document.

Het volgende demonstreert het gebruik van de async module is while om de array te doorlopen en herhaaldelijk de iterator-functie aan te roepen, terwijl test true retourneert. Belt terug wanneer gestopt of wanneer er een fout optreedt.

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. Documenten filteren op afstand opgeslagen in document met $near

  2. Hoe zou je een vriendschapsrelatie in MongoDB modelleren?

  3. Zijn er tools voor schemamigratie voor NoSQL-databases?

  4. Hoe aggregeren op datum wanneer een volledige tijdstempel wordt gegeven in het aggregatiekader?