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

Prawidłowy sposób wstawiania wielu rekordów do Mongodb za pomocą Node.js

Jeśli twój serwer MongoDB ma wersję 2.6 lub nowszą, lepiej skorzystać z poleceń zapisu Bulk API które umożliwiają wykonywanie operacji wstawiania zbiorczego, które są po prostu abstrakcjami na wierzchu serwera, aby ułatwić tworzenie operacji zbiorczych, a tym samym uzyskać wzrost wydajności dzięki aktualizacji w dużych kolekcjach.

Wysyłanie zbiorczych operacji wstawiania w partiach skutkuje mniejszym ruchem 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.

Te operacje masowe występują głównie w dwóch wariantach:

  • Zamówione operacje zbiorcze . Te operacje wykonują wszystkie operacje w kolejności i błędach przy pierwszym błędzie zapisu.
  • Nieuporządkowane operacje zbiorcze . Operacje te wykonują wszystkie operacje równolegle i agregują wszystkie błędy. Nieuporządkowane operacje zbiorcze nie gwarantują kolejności wykonania.

Uwaga, w przypadku serwerów starszych niż 2.6 interfejs API przekonwertuje operacje w dół. Jednak nie jest możliwe przekonwertowanie w dół w 100%, więc mogą wystąpić pewne skrajne przypadki, w których nie będzie można poprawnie zgłosić prawidłowych liczb.

W Twoim przypadku możesz zaimplementować operację wstawiania Bulk API w partiach po 1000, tak jak poniżej:

Dla MongoDB 3.2+ przy użyciu bulkWrite

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/test';
var entries = [ ... ] // a huge array containing the entry objects

var createNewEntries = function(db, entries, callback) {

    // Get the collection and bulk api artefacts
    var collection = db.collection('entries'),          
        bulkUpdateOps = [];    

    entries.forEach(function(doc) {
        bulkUpdateOps.push({ "insertOne": { "document": doc } });

        if (bulkUpdateOps.length === 1000) {
            collection.bulkWrite(bulkUpdateOps).then(function(r) {
                // do something with result
            });
            bulkUpdateOps = [];
        }
    })

    if (bulkUpdateOps.length > 0) {
        collection.bulkWrite(bulkUpdateOps).then(function(r) {
            // do something with result
        });
    }
};

Dla MongoDB <3.2

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/test';
var entries = [ ... ] // a huge array containing the entry objects

var createNewEntries = function(db, entries, callback) {

    // Get the collection and bulk api artefacts
    var collection = db.collection('entries'),          
        bulk = collection.initializeOrderedBulkOp(), // Initialize the Ordered Batch
        counter = 0;    

    // Execute the forEach method, triggers for each entry in the array
    entries.forEach(function(obj) {         

        bulk.insert(obj);           
        counter++;

        if (counter % 1000 == 0 ) {
            // Execute the operation
            bulk.execute(function(err, result) {  
                // re-initialise batch operation           
                bulk = collection.initializeOrderedBulkOp();
                callback();
            });
        }
    });             

    if (counter % 1000 != 0 ){
        bulk.execute(function(err, result) {
            // do something with result 
            callback();             
        }); 
    } 
};

Wywołaj createNewEntries() funkcja.

MongoClient.connect(url, function(err, db) {
    createNewEntries(db, entries, function() {
        db.close();
    });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można uruchomić kontenera mongo z zestawem replik za pomocą docker-compose

  2. Zaktualizuj wiele dokumentów i zwróć wszystkie zaktualizowane dokumenty

  3. MongoDB:BŁĄD:proces potomny nie powiódł się, zakończono z błędem numer 14

  4. Sortuj zagnieżdżoną tablicę obiektów

  5. zapytanie o podelement mongodb