MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak mogę poprawić wydajność zbiorczą MongoDB?

Wysyłaj operacje wstawiania zbiorczego w partiach, ponieważ powoduje to mniejszy ruch na serwerze, a tym samym wykonuje wydajne transakcje przelewowe, nie wysyłając wszystkiego w osobnych instrukcjach, ale raczej dzieląc się na łatwe do zarządzania fragmenty w celu zaangażowania serwera. Przy takim podejściu jest również mniej czasu oczekiwania na odpowiedź w wywołaniu zwrotnym.

O wiele lepszym podejściem byłoby użycie async moduł, więc nawet zapętlenie listy wejść jest operacją nieblokującą. Wybór rozmiaru partii może się różnić, ale wybranie operacji wstawiania partii na 1000 wpisów pozwoliłoby bezpiecznie pozostać poniżej sztywnego limitu 16 MB BSON, ponieważ całe „żądanie” jest równe jednemu dokumentowi BSON.

Poniżej pokazano, jak używać async czas modułu na iterację przez tablicę i wielokrotne wywoływanie funkcji iteratora, podczas gdy test zwraca prawdę. Wywołuje oddzwonienie po zatrzymaniu lub w przypadku wystąpienia błędu.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB 4.0 JRException:Wymagana jest opcja „kursor”, z wyjątkiem agregacji z argumentem wyjaśniania

  2. Usuń elementy z tablicy dokumentów w Spring+Mongo

  3. Mongo DB:Nie można utworzyć klastra shardingu w Ubuntu

  4. Limit czasu sterownika MongoDB C#

  5. Czy możliwe jest dwukrotne powtórzenie kursora mongo?