Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Escrituras reintentables

Las escrituras reintentables permiten que los drivers reintenten operaciones de escritura específicas una vez después de errores de red o si no se puede encontrar un primario en el set de réplicas o clúster.

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. Ver setFeatureCompatibilityVersion.
Guardar reconocimiento
Las escrituras con nivel de confirmación de escritura (write concern) 0 no son reiterables.

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 reintentarles por defecto. Los controladores anteriores requieren la opción retryWrites=true. La opción retryWrites=true se puede omitir en las aplicaciones que utilizan drivers compatibles con MongoDB 4.2 y versiones superiores.

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 activa por defecto las escrituras reintentables. Para desactivar, usar --retryWrites=false:

mongosh --retryWrites=false

MongoDB reintenta las siguientes operaciones si tienen un nivel de confirmación de escritura reconocido (por ejemplo, el nivel de confirmación de escritura no puede ser {w: 0}):

Nota

Las escrituras dentro de transacciones no son individualmente reintentables.

Métodos
Descripciones

Inserts

Actualizaciones de documentos individuales

Eliminación 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 se aplica a los errores de red transitorios y a las elecciones de set de réplicas, pero no a los errores de red persistentes.

Los conductores esperan serverSelectionTimeoutMS para encontrar un nuevo primario antes de volver a intentarlo. Las escrituras reintentables fallan si la conmutación por error toma más tiempo que este tiempo de espera.

Advertencia

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

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

Los controladores oficiales activan por defecto las escrituras reintentables. Las escrituras en la local base de datos fallarán a menos que desactive las escrituras reintentables.

Para desactivar, establezca retryWrites=false en la cadena de 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