Docs Menu
Docs Home
/ /

Operaciones de escritura masiva

MongoDB ofrece a los clientes la posibilidad de realizar operaciones de escritura masivas. Estas operaciones afectan a una sola colección. MongoDB permite a las aplicaciones determinar el nivel aceptable de reconocimiento necesario para dichas operaciones.

El db.collection.bulkWrite() El método proporciona la capacidad de realizar operaciones de inserción, actualización y eliminación masivas.

MongoDB también admite la inserción masiva a través del db.collection.insertMany() método.

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.

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