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 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
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:
insertOneinsertManyupdateOnedeleteOnefindOneAndUpdatefindOneAndDeletefindOneAndReplacebulkWrite(cuando se compone deinsertOne,updateOnedeleteOne, ureplaceOneoperaciones)
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 adeleteManyintentar. -
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
_idcampo 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=falseen 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.
-
findOneAndUpdateEnfindOneAndDeleteel caso defindOneAndReplacelas 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 configurarretryWrites=falseesas 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
lsidytxnNumber), 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
-
Actualiza tu clúster a la versión 8.0.2 del motor o a una posterior.
-
Elimine
retryWrites=falselas cadenas de conexión de su aplicación o cámbielas por.retryWrites=true -
No es necesario cambiar el código de la aplicación. El controlador gestiona los reintentos automáticamente.