Docs Menu
Docs Home
/ /

Escrituras reintentables

Las escrituras reintentables permiten que los controladores vuelvan a intentar operaciones de escritura específicas una vez después de 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 requieren:

Topologías de implementación
Un set de réplicas o un clúster. No es compatible con instancias autónomas.
Motor de almacenamiento
Un motor de almacenamiento con bloqueo a nivel de documento, como WiredTiger o en memoria.
Controladores de MongoDB

Controladores compatibles con MongoDB 3.6+.

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
MongoDB 3.6+ y featureCompatibilityVersion 3.6+ en todos los nodos.setFeatureCompatibilityVersion Ver.
Guardar reconocimiento
Las escrituras con preocupación de escritura 0 no se pueden reintentar.

Las operaciones de confirmación y abortar transacciones se pueden reintentar. Los controladores reintentan estas operaciones una vez si ocurre un error, incluso si retryWrites está false.

Las escrituras dentro de una transacción no son individualmente reintentables, 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 superiores permiten Escrituras reintentables por defecto. Los controladores anteriores requieren la retryWrites=true opción. La opción puede omitirse en aplicaciones que usan controladores compatibles con retryWrites=true 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

mongosh habilita las escrituras reintentables de forma predeterminada. Para deshabilitarlas,--retryWrites=false use:

mongosh --retryWrites=false

MongoDB reintenta estas operaciones si tienen el nivel de confirmación de escritura (write concern) confirmado:

Nota

Las escrituras dentro de transacciones no son individualmente reintentables.

Métodos
Descripciones

Inserts

Actualizaciones de un solo documento

Eliminaciones de un solo documento

findAndModify operaciones (siempre 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.

MongoDB reintenta las escrituras una vez. Esto soluciona errores de red transitorios y elecciones de conjuntos de réplicas, pero no errores de red persistentes.

Los controladores esperan serverSelectionTimeoutMS para encontrar un nuevo servidor principal antes de reintentar. Las escrituras reintentables fallan si la conmutación por error tarda más de este tiempo de espera.

Advertencia

Si un cliente no responde durante más localLogicalSessionTimeoutMinutes de, la escritura podría volver a intentarse y aplicarse nuevamente cuando el cliente se recupere.

serverStatus incluye estadísticas de escritura reintentables en la transactions sección.

Los controladores oficiales habilitan las escrituras reintentables de forma predeterminada. Las escrituras en la local base de datos fallan a menos que se deshabiliten.

Para deshabilitarlo, configure en la retryWrites=false cadenade conexión.

A partir de MongoDB 6.1, si tanto el primer como el segundo intento de una escritura reintentable fallan sin que se realice ni una sola escritura, MongoDB devuelve un error con la etiqueta NoWritesPerformed.

La etiqueta NoWritesPerformed diferencia los resultados de operaciones de agrupación como insertMany(). En una operación insertMany, puede ocurrir uno de los siguientes resultados:

Resultado
Salida de MongoDB

No se han insertado documentos.

Error devuelto con la etiqueta NoWritesPerformed.

Trabajo parcial completado. (Se ha insertado al menos un documento, pero no todos.)

Error devuelto sin la etiqueta NoWritesPerformed.

Se insertan todos los documentos.

Éxito devuelto.

Las aplicaciones pueden utilizar la etiqueta NoWritesPerformed para determinar de manera definitiva que no se insertaron documentos. Este reporte de errores permite que la aplicación mantenga un estado preciso de la base de datos al manejar escrituras reintentables.

En versiones anteriores de MongoDB, se devuelve un error cuando fallan tanto el primer como el segundo intento de una escritura reintentable. Sin embargo, no se hace ninguna distinción para indicar que no se realizaron las escrituras.

Lecturas reintentables

Volver

Guardado masivo

En esta página