

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 name="retryable-writes"></a>

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=true`en 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
<a name="retryable-writes-requirements"></a>

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 incluir`retryWrites=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
<a name="retryable-writes-supported-operations"></a>

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 de`insertOne`, `updateOne``deleteOne`, u `replaceOne` operaciones)

En el `insertMany` caso de y`bulkWrite`, 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**  
`commitTransaction`y 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](#retryable-writes-limitations).

## Limitaciones
<a name="retryable-writes-limitations"></a>

Las siguientes limitaciones se aplican a las escrituras que se pueden volver a intentar en Amazon DocumentDB:
+ `updateMany`y 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.
+ `findOneAndUpdate`En `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
<a name="retryable-writes-enabling"></a>

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 predeterminado`retryWrites=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](connect_programmatically.md)

## Cómo funcionan las escrituras que se pueden volver a intentar
<a name="retryable-writes-how-it-works"></a>

Cuando la aplicación envía una escritura con`retryWrites=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` y`txnNumber`), 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
<a name="retryable-writes-errors"></a>

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
<a name="retryable-writes-migration"></a>

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.

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

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