many - MongoDB: inserción masiva(Bulk.insert) vs inserción múltiple(inserción([...]))
pymongo insert (2)
@Dummy tiene razón en que las operaciones masivas son generalmente más rápidas que las inserciones individuales, sin embargo, a partir de la versión 2.6 y superior, la inserción de múltiples documentos con collection.insert
es solo azúcar sintáctica para un BulkWrite
. Si establece el indicador ordered
en falso, el rendimiento debe ser idéntico a un inserto masivo desordenado:
db.collection.insert(<document array>,{ordered:false})
Esta operación devolverá un BulkWriteResult
, vea más detalles en la documentation .
¿Hay alguna diferencia entre una inserción masiva frente a la inserción de varios documentos ?
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>
)
¿Hay uno que es más rápido?
Sí, hay diferencia. Con operaciones a granel (siempre), solo necesita ir a la base de datos una vez y realizar la operación en lotes de registros, luego volver a la aplicación. Con inserciones individuales, tendrá que ir a la base de datos, hacer la inserción y luego volver a la aplicación, y repetirá este proceso para cada operación de inserción que le indique a la base de datos. Así que las inserciones individuales son muy lentas en comparación con las operaciones a granel. Es como comprar alimentos, si tiene todo lo que necesita para comprar, puede comprarlos todos en un solo viaje (inserto a granel), pero si para cada artículo, debe ir a la tienda para comprarlo y luego conducir. En casa, luego conduzca de regreso a la tienda para comprar otro artículo, entonces no es muy eficiente (como las inserciones individuales)
Nota: aunque, al interactuar con MongoDB utilizando el shell, solo necesita lidiar con una función de insert
para inserciones masivas e individuales, debe hacer una distinción entre las insertOne()
e insertMany()
cuando se utilizan las API del controlador MongoDB. Y nunca debe llamar a insertOne()
dentro de un bucle (razón: vea mi analogía de compras de comestibles más arriba).