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

Jak zapisać 1 milion rekordów w mongodb asynchronicznie?

Wybuchł, ponieważ nie czekasz na zakończenie asynchronicznego wywołania przed przejściem do następnej iteracji. Oznacza to, że budujesz „stos” nierozwiązanych operacji, dopóki nie spowoduje to problemu. Jaka jest nazwa tej strony ponownie? Masz zdjęcie?

Nie jest to więc najlepszy sposób postępowania z "Bulk" wstawki. Na szczęście sterownik MongoDB już o tym pomyślał, poza wspomnianym wcześniej problemem wywołania zwrotnego. W rzeczywistości istnieje "Bulk API" dostępne, aby uczynić to o wiele lepszym. I zakładając, że ściągnąłeś już natywny sterownik jako db obiekt. Ale wolę po prostu używać .collection akcesor z modelu i "async" moduł, aby wszystko było jasne:

var bulk = Model.collection.initializeOrderedBulkOp();
var counter = 0;

async.whilst(
  // Iterator condition
  function() { return count < 1000000 },

  // 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 = Model.collection.initializeOrderedBulkOp();
        callback(err);
      });
    } else {
      callback();
    }
  },

  // When all is done
  function(err) {
    if ( counter % 1000 != 0 ) 
        bulk.execute(function(err,result) {
           console.log( "inserted some more" );
        });        
    console.log( "I'm finished now" ;
  }
);

Różnica polega na używaniu obu „asynchronicznych” metod wywołania zwrotnego po zakończeniu, a nie tylko tworzeniu stosu, ale także wykorzystaniu „interfejsu API operacji zbiorczych” w celu złagodzenia asynchronicznych wywołań zapisu, przesyłając wszystko w instrukcjach aktualizacji wsadowej zawierających 1000 wpisów.

To nie tylko nie „buduje stosu” wykonywania funkcji, jak twój własny przykładowy kod, ale także wykonuje wydajne transakcje „przewodowe”, nie wysyłając wszystkiego w osobnych instrukcjach, ale raczej dzieli się na łatwe do zarządzania „partie” w celu zaangażowania serwera .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. zwrócić tylko ostatni poziom osadzonej właściwości, który jest przeszukiwany w dokumencie

  2. Znajdź zduplikowane rekordy w MongoDB

  3. Łatwy sposób na synchronizację danych między MongoDB i Apache Solr

  4. Otrzymałem zduplikowane dane przy wielokrotnej subskrypcji

  5. MongoDB i Robomongo:nie można się połączyć (uwierzytelnianie)