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.
Requisitos previos
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.6o mayor, y elfeatureCompatibilityVersionde cada nodo del clúster debe ser3.6o mayor.setFeatureCompatibilityVersionfeatureCompatibilityVersionConsulte 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
0no se pueden reintentar.
Escrituras reintentables y transacciones multi-documento
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.
Activar las escrituras reintentables
- 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=trueopción. LaretryWrites=trueopció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 incluirretryWrites=falseen la cadena de conexión. mongoshLas 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
Operaciones de escritura reintentable
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 | |
| |
| 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 |
| 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 |
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.
Comportamiento
Errores persistentes de red
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.
Período de conmutación por error
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.
Diagnósticos
El comando serverStatus y su asistente de shell mongosh db.serverStatus() incluye estadísticas sobre escrituras reintentables en la sección transactions.
Escrituras reintentables local en la base de datos
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.