Prácticas recomendadas para gestionar las actualizaciones simultáneas en DynamoDB - Amazon DynamoDB

Prácticas recomendadas para gestionar las actualizaciones simultáneas en DynamoDB

En sistemas distribuidos, varios procesos o usuarios pueden intentar modificar los mismos datos al mismo tiempo. Sin un control de simultaneidad, estas escrituras simultáneas pueden provocar la pérdida de actualizaciones, datos incoherentes o condiciones de carrera. DynamoDB proporciona varios mecanismos como ayuda para administrar el acceso simultáneo y mantener la integridad de los datos.

nota

Las operaciones de escritura individuales, como UpdateItem, son atómicas y siempre funcionan en la versión más reciente del elemento, independientemente de la simultaneidad. Las estrategias de bloqueo son necesarias cuando la aplicación debe leer un elemento y volver a escribirlo en función del valor de lectura (un ciclo de lectura-modificación-escritura), ya que otro proceso podría modificar el elemento entre la lectura y la escritura.

Existen dos estrategias principales para gestionar las actualizaciones simultáneas:

  • Bloqueo positivo: supone que los conflictos son poco frecuentes. Permite el acceso simultáneo y detecta conflictos en tiempo de escritura mediante escrituras condicionales. Si se detecta un conflicto, se produce un error en la escritura y la aplicación puede volver a intentarlo.

  • Bloqueo negativo: supone que es probable que haya conflictos. Impide el acceso simultáneo al adquirir acceso exclusivo a un recurso antes de modificarlo. Los demás procesos deben esperar hasta que se libere el bloqueo.

En la siguiente tabla, se resumen los enfoques disponibles en DynamoDB:

Enfoque Mecanismo Lo mejor para
Bloqueo optimista Atributo de versión + escrituras condicionales Baja contención, reintentos económicos
Bloqueo negativo (transacciones) TransactWriteItems Atomicidad de varios elementos, contención moderada
Bloqueo negativo (cliente de bloqueo) Tabla de bloqueo exclusiva con asignación y latido Flujos de trabajo prolongados, coordinación distribuida

Elección de una estrategia de control de simultaneidad

Use las siguientes directrices para elegir el enfoque adecuado para satisfacer su carga de trabajo:

Use el bloqueo positivo cuando:
  • Los conflictos son poco frecuentes.

  • El reintento de una escritura errónea no es caro.

  • Actualice un elemento a la vez.

Use las transacciones cuando:
  • Necesita actualizar varios elementos de forma atómica.

  • Se requiere una semántica de todo o nada en todos los elementos o tablas.

  • Debe combinar las comprobaciones de condición con las escrituras en una sola operación.

Use el bloqueo de cliente cuando:
  • Debe coordinar el acceso a los recursos externos en todos los procesos distribuidos.

  • La sección crítica es de larga duración y volver a intentarlo en caso de conflicto resulta caro.

  • Es necesario que el bloqueo caduque automáticamente para gestionar los errores del proceso.

nota

Si utiliza tablas globales de DynamoDB, tenga en cuenta que las tablas globales utilizan una estrategia de reconciliación según la cual “el último escritor gana” para las actualizaciones simultáneas. El bloqueo positivo con números de versión no funciona según lo esperado en todas las regiones, ya que una escritura en una región puede sobrescribir una escritura simultánea en otra región sin comprobar la versión. Diseñe su aplicación para gestionar los conflictos por aplicación cuando utilice tablas globales.