Docs Menu
Docs Home
/
Manual de base de datos
/

Escrituras reintentables

Las escrituras reintentables permiten que los controladores de MongoDB reintenten automáticamente ciertas operaciones de escritura una sola vez si encuentran errores de red o si no pueden encontrar una red en buen estado. principal en el conjunto de réplicas oclúster fragmentado.

Las escrituras reintentables tienen los siguientes requisitos:

Topologías de implementación admitidas
Las escrituras reintentables requieren un Set de réplicas o un clúster particionado y no admiten instancias autónomas.
Motor de almacenamiento compatible
Las escrituras reintentables requieren un motor de almacenamiento que admita el bloqueo a nivel de documento, como el motor de almacenamiento WiredTiger o en memoria.
Controladores de MongoDB 3.6 o superior

Los clientes requieren que los controladores de MongoDB estén actualizados para MongoDB 3.6 o superior:

Java 3.6+

Python 3.6+

C 1.9+

Go 1.8+

C# 2.5+

Node 3.0+

Ruby 2.5+

Rust 2.1+

Swift 1.2+

Perl 2.0+

PHPC 1.4+

Scala 2.2+

C++ 3.6.6+

Versión de MongoDB
La versión de MongoDB de cada nodo del clúster debe ser 3.6 o mayor, y el featureCompatibilityVersion de cada nodo del clúster debe ser 3.6 o mayor.setFeatureCompatibilityVersion featureCompatibilityVersion Consulte para obtener más información sobre el indicador.
Guardar reconocimiento
Las operaciones de guardado emitidas con un nivel de confirmación de escritura (write concern) de 0 no se pueden reintentar.

Las operaciones de confirmación y anulación de transacciones son operaciones de escritura reintentables. Si la operación de confirmación o la operación de anulación encuentra un error, los controladores de MongoDB reintentan la operación una sola vez, independientemente de si retryWrites está configurado en false.

Las operaciones de guardar dentro de la transacción no se pueden reintentar individualmente, independientemente del valor de retryWrites.

Para obtener más información sobre las transacciones, consulta Transacciones.

Controladores de MongoDB
Los controladores compatibles con MongoDB 4.2 y versiones posteriores habilitan las escrituras reintentables de forma predeterminada. Los controladores anteriores requieren la retryWrites=true opción. La retryWrites=true opción puede omitirse en aplicaciones que usen controladores compatibles con MongoDB,4 2 y versiones posteriores.

Para desactivar las escrituras reintentables, las aplicaciones que utilizan controladores compatibles con MongoDB 4.2 y versiones posteriores deben incluir retryWrites=false en la cadena de conexión.
mongosh

Las escrituras reintentables están habilitadas por defecto en mongosh. Para desactivar las escrituras reintentables, utiliza la opción de línea de comandos --retryWrites=false:

mongosh --retryWrites=false

Se pueden reintentar las siguientes operaciones de guardado cuando se emiten con un nivel de confirmación de escritura (write concern) reconocido; por ejemplo, Nivel de confirmación de escritura (write concern) no puede ser {w: 0}.

Nota

Las operaciones de guardado dentro de las transacciones no se pueden reintentar individualmente.

Métodos
Descripciones

Operaciones de inserción

Operaciones de actualización de documento único

Operaciones de eliminación de documento único

findAndModify operaciones. Todas las operaciones findAndModify son operaciones de un único documento.

db.collection.bulkWrite() con las siguientes operaciones de guardado.

Operaciones de guardado masiva que solo consisten en operaciones de guardado de un solo documento. Una operación masiva que se puede reintentar puede incluir cualquier combinación de las operaciones de guardado especificadas, pero no puede incluir ninguna operación de guardado de múltiples documentos, como updateMany.

Operaciones de guardado masiva que solo consisten en operaciones de guardado de un solo documento. Una operación masiva que se puede reintentar puede incluir cualquier combinación de las operaciones de guardado especificadas, pero no puede incluir ninguna operación de guardado de múltiples documentos, como update, que especifica true para la opción multi.

Nota

Actualizaciones de los valores de clave de fragmento

A partir de MongoDB,4.2 puede actualizar el valor de la clave de fragmento de un documento (a menos que el campo de clave de fragmento sea el _id campo inmutable) mediante operaciones de actualización/findAndModify de un solo documento, ya sea como una escritura reintentable o en una transacción. Para más información,consulte Cambiar el valor de la clave de fragmento de un documento.

Las escrituras reintentables de MongoDB realizan solo un intento. Esto ayuda a abordar errores de red transitorios y elecciones de Set de réplicas, pero no errores de red persistentes.

Si el controlador no puede encontrar un primario en buen estado en el Set de réplicas de destino o en la partición del clúster particionado, los controladores esperan serverSelectionTimeoutMS milisegundos para determinar el nuevo primario antes de reintentar. Las escrituras reintentables no abordan las instancias en las que el período de conmutación por error supera serverSelectionTimeoutMS.

Advertencia

Si la aplicación cliente se vuelve temporalmente no receptiva durante más de localLogicalSessionTimeoutMinutes después de realizar una operación de guardado, existe la posibilidad de que, cuando la aplicación cliente comience a responder (sin reiniciar), la operación de guardado se reintente y se aplique nuevamente.

El comando serverStatus y su asistente de shell mongosh db.serverStatus() incluye estadísticas sobre escrituras reintentables en la sección transactions.

Los controladores oficiales de MongoDB habilitan las escrituras reintentables por defecto. Las aplicaciones que escriben en la base de datos local encontrarán errores de escritura, a menos que las escrituras reintentables estén explícitamente deshabilitadas.

Para desactivar las escrituras reintentables, especifica retryWrites=false en la cadena de conexión para el clúster de MongoDB.

Volver

Guardado masivo

En esta página