Administración de la configuración en tablas de capacidad aprovisionada de DynamoDB - Amazon DynamoDB

Administración de la configuración en tablas de capacidad aprovisionada de DynamoDB

Al crear una nueva tabla aprovisionada en Amazon DynamoDB, debe especificar su capacidad de rendimiento aprovisionada. Esta es la cantidad de actividad de lectura y escritura que la tabla puede admitir. DynamoDB utiliza esta información para reservar recursos del sistema suficientes para satisfacer sus necesidades de rendimiento.

nota

En su lugar, puede crear una tabla de modo en diferido para no tener que administrar ninguna configuración de capacidad para servidores, almacenamiento o rendimiento. DynamoDB se adapta de forma instantánea a sus cargas de trabajo a medida que aumentan o disminuyen a cualquier nivel de tráfico alcanzado previamente. Si el nivel de tráfico de una carga de trabajo alcanza un nuevo nivel máximo, DynamoDB se adapta rápidamente para acomodar la carga de trabajo. Para obtener más información, consulte Modo bajo demanda.

Si lo prefiere, puede permitir que la función de escalado automático de DynamoDB administre la capacidad de rendimiento de la tabla. Sin embargo, en cualquier caso deberá proporcionar los ajustes iniciales de capacidad de lectura y escritura al crear la tabla. La función Auto Scaling de DynamoDB utiliza estos ajustes iniciales como punto de partida y, a continuación, los ajusta dinámicamente en respuesta a los requisitos de la aplicación. Para obtener más información, consulte Administración automática de la capacidad de rendimiento con la función Auto Scaling de DynamoDB.

A medida que cambian los requisitos de datos y acceso de la aplicación, puede que tenga que ajustar los ajustes de desempeño de la tabla. Si utiliza la función Auto Scaling de DynamoDB, la configuración de rendimiento se modificarán automáticamente en respuesta a las cargas de trabajo reales. También puede usar la operación UpdateTable para ajustar manualmente la capacidad de desempeño de la tabla. Es posible que prefiera hacerlo de ese modo para cargar datos masivamente de un almacén de datos en la nueva tabla de DynamoDB. Podría crear la tabla con un ajuste de desempeño de escritura mayor y, a continuación, reducir este ajuste una vez finalizada la carga masiva de datos.

Los requisitos de rendimiento se especifican en unidades de capacidad. Una unidad de capacidad es la cantidad de datos que la aplicación tiene que leer o escribir por segundo. Puede cambiar esta configuración más adelante, si es necesario, o habilitar la función Auto Scaling de DynamoDB para que se modifiquen automáticamente.

Unidades de capacidad de lectura

Una unidad de capacidad de lectura equivale a una lectura de consistencia alta por segundo, o bien a dos lecturas eventualmente consistentes por segundo, para un elemento con un tamaño de hasta 4 KB.

nota

Para obtener más información sobre los modelos de consistencia de lectura de DynamoDB, consulte Consistencia de lectura.

Por ejemplo, supongamos que ha creado una tabla con 10 unidades de capacidad de lectura provisionadas. Esto le permite realizar 10 lecturas de consistencia alta por segundo o 20 lecturas eventualmente consistentes por segundo, para elementos de hasta 4 KB.

Al leer un elemento de más de 4 KB se consumen más unidades de capacidad de lectura. Por ejemplo, una lectura de consistencia alta de un elemento de 8 KB (4 KB × 2) consume 2 unidades de capacidad de lectura. Una lectura consistente final del mismo elemento consume solo 1 unidad de capacidad de lectura.

A efectos de las lecturas, los tamaños de los elementos se redondean al siguiente múltiplo de 4 KB. Por ejemplo, leer un elemento de 3 500 bytes consume el mismo rendimiento que leer un elemento de 4 KB.

Consumo de unidades de capacidad para las lecturas

A continuación se describe cómo se consumen las unidades de capacidad de lectura en las operaciones de lectura de DynamoDB:

  • GetItem: lee un solo elemento de una tabla. Para determinar el número de unidades de capacidad que GetItem va a consumir, tome el tamaño del elemento y redondéela al múltiplo de 4 KB inmediatamente superior. Si ha especificado una lectura de consistencia alta, este es el número de unidades de capacidad necesarias. Si se trata de una lectura consistente final (el valor predeterminado), divida este número por dos.

    Por ejemplo, si lee un elemento de 3,5 KB, DynamoDB redondea su tamaño a 4 KB. Si lee un elemento de 10 KB, DynamoDB redondea su tamaño a 12 KB.

  • BatchGetItem: lee hasta 100 elementos de una o varias tablas. DynamoDB procesa cada elemento del lote como una solicitud GetItem individual; en consecuencia, DynamoDB redondea primero el tamaño de cada elemento al múltiplo de 4 KB inmediatamente superior y, a continuación, calcula el tamaño total. El resultado no es necesariamente igual que el tamaño total de todos los elementos. Por ejemplo, si BatchGetItem lee un elemento de 1,5 KB y un elemento de 6,5 KB, DynamoDB calcula sus tamaños en 12 KB (4 KB + 8 KB) y no en 8 KB (1,5 KB + 6,5 KB).

  • Query: lee varios elementos que tienen el mismo valor de clave de partición. Todos los elementos devueltos se tratan como una sola operación de lectura, de tal forma que DynamoDB calcula el tamaño total de todos los elementos y, a continuación, redondea al múltiplo de 4 KB inmediatamente superior. Por ejemplo, supongamos que la consulta devuelve 10 elementos cuyo tamaño combinado es de 40,8 KB. DynamoDB redondea el tamaño del elemento de la operación a 44 KB. Si una consulta devuelve 1500 elementos de 64 bytes cada uno, el tamaño acumulado es de 96 KB.

  • Scan: lee todos los elementos de una tabla. DynamoDB considera el tamaño de los elementos que se evalúan, no el tamaño de los elementos que el examen devuelve.

Si lleva a cabo una operación de lectura con un elemento que no existe, DynamoDB consume igualmente rendimiento de lectura aprovisionado; una solicitud de lectura de consistencia alta consumirá una unidad de capacidad de lectura, mientras que una lectura eventualmente consistente consumirá 0,5 unidades de capacidad de lectura.

Para cualquier operación que devuelve elementos, puede solicitar un subconjunto de atributos para recuperarlos. Sin embargo, esto no afecta al cálculo del tamaño de los elementos. Por otra parte, Query y Scan pueden devolver recuentos de elementos en lugar de valores de atributos. Para obtener el recuento de los elementos, se consume la misma cantidad de unidades de capacidad de lectura y se llevan a cabo los mismos cálculos de tamaño de los elementos. Esto se debe a que DynamoDB tiene que leer cada elemento para poder incrementar el recuento.

Operaciones de lectura y consistencia de lectura

En los cálculos anteriores se ha dado por hecho que las solicitudes son de lectura de consistencia alta. Para las solicitudes de lectura consistente final, la operación consume solo la mitad de las unidades de capacidad. Para una lectura consistente final, si el tamaño total de los elementos es de 80 KB, la operación consume solo 10 unidades de capacidad.

Unidades de capacidad de escritura

Una unidad de capacidad de escritura equivale a una escritura por segundo para un elemento con un tamaño de hasta 1 KB.

Por ejemplo, supongamos que ha creado una tabla con 10 unidades de capacidad de escritura provisionadas. Esto le permite realizar 10 escrituras por segundo, para elementos con un tamaño de hasta 1 KB por segundo.

A efectos de las escrituras, los tamaños de los elementos se redondean al siguiente múltiplo de 1 KB. Por ejemplo, escribir un elemento de 500 bytes consume el mismo rendimiento que leer un elemento de 1 KB.

Consumo de unidades de capacidad para las escrituras

A continuación se describe cómo se consumen las unidades de capacidad de escritura en las operaciones de escritura de DynamoDB:

  • PutItem: escribe un solo elemento en una tabla. Si ya existe un elemento con la misma clave principal en la tabla, la operación lo sustituye. Para calcular el consumo de desempeño provisionado, el tamaño de elemento que se tiene en cuenta es el mayor de los dos.

  • UpdateItem: modifica un solo elemento en la tabla. DynamoDB considera el tamaño del elemento tal y como aparece antes y después de la actualización. El desempeño provisionado consumido refleja el mayor de estos tamaños de elemento. Aunque se actualice tan solo un subconjunto de atributos del elemento, UpdateItem consumirá la cantidad total de desempeño provisionado (el mayor de los tamaños de elemento de "antes" y "después").

  • DeleteItem: elimina un solo elemento de una tabla. El consumo de desempeño provisionado se basa en el tamaño del elemento eliminado.

  • BatchWriteItem: escribe hasta 25 elementos en una o varias tablas. DynamoDB procesa cada elemento del lote como una consulta PutItem or DeleteItem individual (las actualizaciones no son compatibles). En consecuencia, DynamoDB redondea primero el tamaño de cada elemento al múltiplo de 1 KB inmediatamente superior y, a continuación, calcula el tamaño total. El resultado no es necesariamente igual que el tamaño total de todos los elementos. Por ejemplo, si BatchWriteItem escribe un elemento de 500 bytes y un elemento de 3,5 KB, DynamoDB calcula el tamaño en 5 KB (1 KB + 4 KB) y no en 4 KB (500 bytes + 3,5 KB).

A efectos de las operaciones PutItem, UpdateItem y DeleteItem, DynamoDB redondea los tamaños de los elementos al 1 KB inmediatamente superior. Por ejemplo, si coloca o elimina un elemento de 1,6 KB, DynamoDB redondeará su tamaño a 2 KB.

PutItem, UpdateItem y DeleteItem permiten las escrituras condicionales, en las que se especifica una expresión que debe evaluarse en true para que la operación se lleve a cabo correctamente. Aunque la expresión se evalúe en false, DynamoDB consume unidades de capacidad de escritura de la tabla:

  • El número de unidades de capacidad de escritura consumidas por un elemento que ya existe dependerá del tamaño del elemento nuevo. (Por ejemplo, un error de escritura condicional de un elemento de 1 KB consumiría una unidad de capacidad de escritura; si el elemento nuevo tuviera el doble de tamaño, la escritura condicional que no se pudo realizar consumiría dos unidades de capacidad de escritura).

  • DynamoDB consume una unidad de capacidad de escritura para un elemento nuevo.

Limitación controlada de solicitudes y capacidad de ráfaga

Si la aplicación lleva a cabo lecturas o escrituras a una velocidad mayor que la admitida por la tabla, DynamoDB comienza a aplicar la limitación controlada a esas solicitudes. Cuando DynamoDB aplica una limitación controlada a una lectura o escritura, devuelve una ProvisionedThroughputExceededException a la persona que llama. A continuación, la aplicación puede adoptar las medidas pertinentes, como esperar un breve intervalo de tiempo antes de repetir la solicitud.

nota

Le recomendamos que utilice los SDK de AWS para desarrollar software. Dado que los SDK de AWS incluyen compatibilidad integrada para reintentar las solicitudes que han sido objeto de una limitación controlada, no tendrá que escribir personalmente esta lógica. Para obtener más información, consulte Reintentos de error y retardo exponencial.

La consola de DynamoDB muestra métricas de Amazon CloudWatch de las tablas, para que pueda monitorear las solicitudes de lectura y escritura que han sido objeto de una limitación controlada. Si se le aplica la limitación controlada en demasiadas ocasiones, puede ser conveniente aumentar los ajustes de desempeño provisionado de la tabla.

En algunos casos, DynamoDB utiliza la capacidad de ampliación para atender las lecturas o escrituras que superan los ajustes de rendimiento configurados para la tabla. Con la capacidad de ráfaga, pueden realizarse correctamente solicitudes de lectura o escritura inesperadas que, de otro modo, habrían sido objeto de una limitación controlada. Para obtener más información, consulte Uso eficaz de la capacidad de ráfagas.

Limitación controlada de solicitudes y capacidad de adaptación

DynamoDB distribuye automáticamente los datos entre las particiones, que se almacenan en varios servidores de la nube de AWS. (Para obtener más información, consulte Partitions y distribución de datos). No siempre es posible distribuir uniformemente la actividad de lectura y escritura. Si el acceso a los datos está desequilibrado, una partición "caliente" podría recibir un volumen mayor de tráfico de lectura y escritura que otras particiones. De forma automática, la capacidad de adaptación hace que la capacidad de rendimiento aumente en las particiones que reciben más tráfico. Para obtener más información, consulte Descripción de la capacidad de adaptación de DynamoDB.

Elección de los ajustes de desempeño iniciales

Cada aplicación tiene requisitos diferentes de lectura y escritura en la base de datos. Al determinar la configuración de rendimiento inicial de una tabla de DynamoDB, debe tener en cuenta los siguientes datos:

  • Tamaño de los elementos. Algunos elementos son lo bastante pequeños para leerlos o escribirlos con una sola unidad de capacidad. Los elementos mayores requieren varias unidades de capacidad. Si calcula el tamaño de los elementos que la tabla contendrá, podrá especificar ajustes más precisos de desempeño provisionado para la tabla.

  • Tasas previstas de solicitudes de lectura y escritura. Además del tamaño de elemento, debe calcular el número de lecturas y escrituras que debe llevar a cabo por segundo.

  • Requisitos de consistencia de lectura. Las unidades de capacidad de lectura se basan en operaciones de lectura de consistencia alta, que consumen el doble de recursos de la base de datos que las lecturas coherentes finales. Es importante determinar si la aplicación necesita las lecturas de consistencia alta o si es posible adoptar un enfoque más flexible que realice en su lugar lecturas consistentes finales. (Las operaciones de lectura de DynamoDB presentan consistencia final de forma predeterminada, pero, si es preciso, puede solicitar que sean de consistencia alta).

Por ejemplo, supongamos que desea leer 80 elementos por segundo en una tabla. Los elementos tienen un tamaño de 3 KB y desea realizar lecturas de consistencia alta. En este caso, cada lectura requiere una unidad de capacidad de lectura provisionada. Para determinar esta cifra, hay que dividir el tamaño de elemento de la operación por 4 KB y, a continuación, redondearlo al número entero más próximo, como en este ejemplo:

  • 3 KB / 4 KB = 0,75 o 1 unidad de capacidad de lectura

En este caso, deberá establecer el nivel de desempeño provisionado de la tabla en 80 unidades de capacidad de lectura:

  • 1 unidad de capacidad de lectura por elemento × 80 lecturas por segundo = 80 unidades de capacidad de lectura

Ahora, suponga que desea escribir 100 elementos por segundo en la tabla y que los elementos tienen un tamaño de 512 bytes. En este caso, cada escritura requiere una unidad de capacidad de escritura provisionada. Para determinar esta cifra, hay que dividir el tamaño de elemento de la operación por 1 KB y, a continuación, redondearlo al número entero más próximo:

  • 512  bytes / 1 KB = 0,5 o 1

En este caso, es conveniente establecer el nivel de desempeño de escritura provisionado de la tabla en 100 unidades de capacidad de escritura:

  • 1 unidad de capacidad de escritura por elemento × 100 escrituras por segundo = 100 unidades de capacidad de escritura

nota

Para obtener recomendaciones sobre el desempeño provisionado y temas relacionados, consulte Prácticas recomendadas para diseñar y utilizar claves de partición de forma eficaz.

Modificación de los ajustes de desempeño

Si ha habilitado la función de escalado automático de DynamoDB en una tabla, la capacidad de rendimiento de esta se ajustará dinámicamente en respuesta al uso que se haga de ella. No se requiere intervención manual alguna.

Puede modificar los ajustes de desempeño provisionado de la tabla en la AWS Management Console o mediante la operación UpdateTable. Para obtener más información sobre las reducciones y los incrementos de rendimiento diarios, consulte Cuotas de servicio, cuenta y tabla en Amazon DynamoDB.