2016-01-31 2 views
10

C'è qualche differenza tra uno bulk insert rispetto allo inserting multiple documents?MongoDB: Inserimento di massa (Bulk.insert) vs inserimento multiplo (inserire ([...]))

var bulk = db.items.initializeUnorderedBulkOp(); 
bulk.insert({ item: "abc123", defaultQty: 100, status: "A", points: 100 }); 
bulk.insert({ item: "ijk123", defaultQty: 200, status: "A", points: 200 }); 
bulk.insert({ item: "mop123", defaultQty: 0, status: "P", points: 0 }); 
bulk.execute(); 

VS

db.collection.insert(
    <document or array of documents> 
) 

C'è uno questo è più veloce?

risposta

19

@Dummy è vero che le operazioni di massa sono generalmente più veloce di singoli inserti, tuttavia, dalla versione 2.6 e sopra, inserendo più documenti usando collection.insert è zucchero sintattico per un BulkWrite. Se si imposta il flag ordered su false, prestazioni dovrebbero essere identiche a un inserimento di massa non ordinata:

db.collection.insert(<document array>,{ordered:false}) 

Questa operazione restituirà un BulkWriteResult, vedere più dettagli nel documentation.

13

Sì, c'è differenza. Con le operazioni di massa (sempre), è sufficiente accedere al database una volta e si esegue l'operazione su batch di record, quindi si torna all'applicazione. Con i singoli inserti, è necessario andare al database, inserire l'inserto, quindi tornare all'applicazione e ripetere questa procedura per ogni singola operazione di inserimento che il database deve eseguire. Quindi i singoli inserti sono molto lenti rispetto alle operazioni di massa. È come fare la spesa, se hai tutto ciò che ti serve per comprarlo, puoi comprarli tutti in un unico viaggio (inserzione di massa), ma se per ogni oggetto, devi guidare fino al negozio per prenderlo, e poi guidare home, quindi tornare al negozio per acquistare un altro articolo, quindi non è molto efficiente (come i singoli inserimenti)

Nota: anche se, interagendo con MongoDB utilizzando la shell, è necessario gestire solo una funzione insert per gli inserimenti singoli e di grandi dimensioni, è necessario fare una distinzione tra le operazioni insertOne() e insertMany() quando si utilizzano le API del driver MongoDB. E non si dovrebbe mai chiamare insertOne() all'interno di un ciclo (motivo: vedere l'analogia di acquisto di generi alimentari sopra).