Docs Menu
Docs Home
/ /

Operaciones de escritura masiva

MongoDB ofrece a los clientes la capacidad de realizar operaciones de guardado en bloque. A partir de MongoDB 8.0, puede realizar operaciones de guardado masivo en varias bases de datos y colecciones. Si está utilizando una versión anterior a MongoDB 8.0, puede realizar operaciones de guardado masivo en una sola colección.

Para realizar operaciones de escritura masiva en múltiples bases de datos y colecciones en MongoDB 8.0, utilice el bulkWriteComando de base de datos o el Mongo.bulkWrite() mongosh método.

Para realizar operaciones de escritura masiva en una sola colección, utilice el método db.collection.bulkWrite() mongosh. Si está ejecutando MongoDB 8.0 o posterior, también puede usar bulkWrite o Mongo.bulkWrite() para guardarlo en una sola colección.

Las operaciones de escritura masiva se ejecutanen serie (ordenadas) o en cualquier orden(desordenadas). De forma predeterminada, las operaciones se ordenan y se detienen al primer error. Las operaciones desordenadas continúan a pesar de los errores y pueden ejecutarse en paralelo, lo que las hace generalmente más rápidas para las colecciones fragmentadas.

Para obtener información detallada sobre el comportamiento de ejecución y el manejo de errores,db.collection.bulkWrite() consulte Mongo.bulkWrite() o.

Las operaciones de escritura masiva admiten: Insertar uno, Actualizar uno, Actualizar muchos, Reemplazar uno, Borrar uno y Borrar muchos.

Las operaciones de inserción masiva de gran tamaño pueden afectar el rendimiento de los clústeres fragmentados. Para optimizar las escrituras masivas en colecciones fragmentadas:

Si su colección particionada está vacía y no está utilizando el particionado con hash para la primera clave de su clave de particionado, entonces su colección tiene solo un fragmento inicial, que reside en una sola partición. Luego, MongoDB debe tomarse un tiempo para recibir datos y distribuir fragmentos a los fragmentos disponibles. Para evitar este costo de rendimiento, divida previamente la colección creando rangos en un clúster.

Para mejorar el rendimiento de escritura en clústeres segmentados, realiza una escritura masiva desordenada configurando ordered en false cuando realices una escritura masiva. mongos intenta enviar los guardados a varias particiones simultáneamente. Para colecciones vacías, primero se debe segmentar la colección como se describe en División de fragmentos en un clúster.

Si la clave de fragmentación aumenta de manera monotónica durante una inserción, entonces todos los datos insertados van al último fragmento en la colección, que siempre terminará en un solo fragmento. Por lo tanto, la capacidad de inserción del clúster nunca superará la capacidad de inserción de ese único fragmento.

Si el volumen de la inserción es mayor que lo que puede procesar un solo fragmento, y si no se puede evitar que una clave de fragmentación aumente de forma monotónica, se deben considerar las siguientes modificaciones en la aplicación:

  • Invierta los bits binarios de la clave de fragmentación. Esto preserva la información y evita correlacionar el orden de inserción con una secuencia creciente de valores.

  • Intercambia las primeras y últimas palabras de 16 bits para "barajar" las inserciones.

Ejemplo

El siguiente ejemplo, en C++, intercambia la palabra de 16 bits inicial y final de los tipos BSON ObjectIds generados para que no aumenten de forma monotónica.

using namespace mongo;
OID make_an_id() {
OID x = OID::gen();
const unsigned char *p = x.getData();
swap( (unsigned short&) p[0], (unsigned short&) p[10] );
return x;
}
void foo() {
// create an object
BSONObj o = BSON( "_id" << make_an_id() << "x" << 3 << "name" << "jane" );
// now we may insert o into a sharded collection
}

Volver

Métodos

En esta página