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

Jak mohu zlepšit hromadný výkon MongoDB?

Odesílejte operace hromadného vkládání v dávkách, protože to vede k menšímu provozu na serveru, a tím k provádění efektivních bankovních transakcí tím, že se neposílá vše v jednotlivých výpisech, ale spíše se rozdělují na zvládnutelné části pro nasazení serveru. S tímto přístupem je také méně času čekání na odpověď ve zpětném volání.

Mnohem lepším přístupem by bylo použití async modul, takže i opakování seznamu vstupů je neblokující operace. Výběr velikosti dávky se může lišit, ale výběr operací dávkového vkládání na 1000 záznamů by zajistil, že zůstanete pod pevným limitem 16 MB BSON, protože celý „požadavek“ se rovná jednomu dokumentu BSON.

Následující text ukazuje použití async modul při iteraci polem a opakovaném volání funkce iterátoru, zatímco test vrátí hodnotu true. Při zastavení nebo při chybě zavolá zpětné volání.

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. mongodb:dotaz find() v kolekci

  2. Připojení odmítnuto - connect(2) s rake db:seed na Mongodb

  3. Redis ukládání řetězců jako vyrovnávacích pamětí na některých OS, ne na jiných?

  4. Konvence pojmenovávání klíčů Redis?