View a markdown version of this page

Escrituras que se pueden volver a intentar en Amazon DocumentDB - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Escrituras que se pueden volver a intentar en Amazon DocumentDB

A partir de la versión 8.0.2 del motor, Amazon DocumentDB admite escrituras que se pueden volver a intentar. Cuando una operación de escritura falla debido a un error transitorio de red o a una elección primaria, el controlador puede volver a intentar la operación automáticamente una sola vez. Amazon DocumentDB deduplica la escritura reintentada para que la operación se aplique como máximo una vez, preservando la idempotencia.

Las escrituras reintentables requieren un MongoDB-compatible controlador que sea compatible con el protocolo de escritura reintentable. La mayoría de MongoDB-compatible los controladores actuales permiten realizar escrituras reintentables de forma predeterminada (retryWrites=trueen la cadena de conexión). Si está actualizando el motor 8.0.2 desde una versión anterior, puede eliminarla retryWrites=false de la cadena de conexión para habilitar esta función.

Requisitos

Para utilizar escrituras que se puedan volver a intentar, debe cumplir los siguientes requisitos:

  • Versión 8.0.2 o posterior del motor Amazon DocumentDB.

  • Un MongoDB-compatible controlador que admite escrituras que se pueden volver a intentar. Para obtener la versión mínima, consulte la documentación de su controlador.

  • La cadena de conexión debe incluirretryWrites=true, o el controlador debe tener la opción predeterminada de reintentar las escrituras (lo hacen la mayoría de los controladores actuales).

Operaciones admitidas

Las escrituras reintentables se aplican a las operaciones de escritura en las que cada escritura individual afecta como máximo a un documento. Las operaciones por lotes cumplen los requisitos, ya que cada escritura del lote se deduplica por separado.

Se pueden volver a intentar las siguientes operaciones de escritura:

  • insertOne

  • insertMany

  • updateOne

  • deleteOne

  • findOneAndUpdate

  • findOneAndDelete

  • findOneAndReplace

  • bulkWrite(cuando se compone deinsertOne, updateOnedeleteOne, u replaceOne operaciones)

En el insertMany caso de ybulkWrite, cada documento del lote se deduplica de forma individual. Si es necesario volver a intentarlo, solo se insertan los documentos que aún no se hayan aplicado.

nota

commitTransactiony también abortTransaction se pueden volver a intentar, como comandos de control de transacciones y no como escrituras. Las escrituras individuales dentro de una transacción no se pueden volver a intentar. Para obtener más información, consulte Limitaciones.

Limitaciones

Las siguientes limitaciones se aplican a las escrituras que se pueden volver a intentar en Amazon DocumentDB:

  • updateManyy no se pueden volver a deleteMany intentar.

  • Las escrituras en transacciones con varios estados de cuenta no se pueden volver a intentar. Las operaciones de confirmación y cancelación de transacciones se pueden volver a intentar por separado.

  • Los documentos deben incluir un _id campo para las inserciones que se puedan volver a intentar.

  • Las escrituras que se pueden volver a intentar solo están disponibles en la versión 8.0.2 y posteriores del motor. En las versiones anteriores del motor, establézcala retryWrites=false en la cadena de conexión para evitar errores.

  • Las operaciones de escritura no se pueden volver a intentar en los clústeres que utilizan la versión 1.0 del planificador de consultas.

  • findOneAndUpdateEn findOneAndDelete el caso de findOneAndReplace las operaciones que devuelven documentos de gran tamaño, las escrituras que se pueden volver a intentar pueden aumentar la latencia de escritura, ya que todo el documento resultante se almacena en caché para su deduplicación. Si el rendimiento de escritura es fundamental y los documentos devueltos son grandes, considere la posibilidad de configurar retryWrites=false esas cargas de trabajo.

Habilitar las escrituras que se pueden volver a intentar

Para habilitar las escrituras que se pueden volver a intentar, incluye retryWrites=true en la cadena de conexión:

mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true

Si el controlador tiene el valor predeterminadoretryWrites=true, puedes eliminar cualquier contenido explícito retryWrites=false de tu cadena de conexión.

Para ver el tutorial completo sobre la cadena de conexión, consulte. Conexión mediante programación a Amazon DocumentDB

Cómo funcionan las escrituras que se pueden volver a intentar

Cuando la aplicación envía una escritura conretryWrites=true, el controlador adjunta un identificador de sesión lógico (lsid) y un número de transacción (txnNumber) al comando de escritura. Amazon DocumentDB usa estos identificadores para deduplicar las escrituras:

  • En el primer intento, Amazon DocumentDB ejecuta la escritura y almacena en caché el resultado.

  • Si el controlador vuelve a intentar la misma escritura (la misma lsid ytxnNumber), Amazon DocumentDB devuelve el resultado almacenado en caché sin volver a ejecutar la escritura.

  • Amazon DocumentDB acepta los reintentos durante 60 minutos después de la escritura original. Los controladores vuelven a intentarlo inmediatamente, por lo que este período es mucho más largo de lo que necesita un controlador.

Si se produce un reintento más de 60 minutos después de la escritura original, Amazon DocumentDB ya no tiene el resultado almacenado en caché y ejecuta la escritura como una operación nueva.

Gestión de errores

Los siguientes errores son específicos de las escrituras que se pueden volver a intentar en Amazon DocumentDB:

Código de error Name Description (Descripción)
225 TransactionTooOld Ya se ha confirmado un número de transacción más nuevo para la misma sesión y declaración, por lo que este reintento es demasiado antiguo para aplicarlo.
301 No se admiten las escrituras que se pueden volver a intentar La escritura incluía campos de escritura reintentables, pero la versión del motor no admite escrituras reintentables o la operación no se puede volver a intentar. Se establece retryWrites=false cuando se conecta a versiones del motor anteriores a la 8.0.2.

Migración desde RetryWrites=false

Si estás actualizando a la versión 8.0.2 del motor y actualmente la utilizas en tus cadenas de conexión: retryWrites=false

  1. Actualiza tu clúster a la versión 8.0.2 del motor o a una posterior.

  2. Elimine retryWrites=false las cadenas de conexión de su aplicación o cámbielas por. retryWrites=true

  3. No es necesario cambiar el código de la aplicación. El controlador gestiona los reintentos automáticamente.