Directrices generales sobre los índices secundarios de DynamoDB - Amazon DynamoDB

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.

Directrices generales sobre los índices secundarios de DynamoDB

Amazon DynamoDB admite dos tipos de índices secundarios:

  • Índice secundario global (GSI): índice con una clave de partición y una clave de clasificación que pueden ser diferentes de las de la tabla base. Un índice secundario global se considera "global" porque las consultas que se realizan en el índice pueden abarcar todos los datos de la tabla base y todas las particiones. Los índices secundarios globales no tienen limitaciones de tamaño y cuentan con su propia configuración de rendimiento aprovisionada para la actividad de lectura y escritura, que es diferente de la configuración de la tabla base.

  • Índice secundario local (LSI): un índice que tiene la misma clave de partición que la tabla base, pero una clave de clasificación diferente. Un índice secundario local se considera "local" en el sentido de que el ámbito de todas sus particiones se corresponde con una partición de la tabla base que tiene el mismo valor de clave de partición. Por tanto, el tamaño total de los elementos indexados de cualquier valor de clave de partición no podrá ser superior a 10 GB. Además, los índices secundarios locales comparten la configuración de rendimiento aprovisionado para la actividad de lectura y lectura con la tabla que están indexando.

Cada tabla de DynamoDB puede tener hasta 20 índices secundarios globales (cuota predeterminada) y 5 índices secundarios locales.

Los índices secundarios globales suelen ser más útiles que los locales. Determinar qué tipo de índice utilizar dependerá también de los requisitos de su aplicación. Para obtener una comparación de los índices secundarios globales y los índices secundarios locales y obtener más información sobre cómo elegir entre ellos, consulte. Uso de índices secundarios para mejorar el acceso a los datos

A continuación, se muestran algunos principios generales y patrones de diseño que deben tenerse en cuenta al crear índices en DynamoDB:

Uso eficaz de los índices

Mantenga el menor número de índices posible. No cree índices secundarios en atributos que no consulte con frecuencia. Los índices que se utilizan pocas veces provocan un aumento del almacenamiento y de los costos de E/S y no mejoran el rendimiento de la aplicación.

Elección cuidadosa de las proyecciones

Como los índices secundarios consumen almacenamiento y rendimiento aprovisionado, es importante que su tamaño sea lo menor posible. Además, cuanto menor sea el índice, mayor será el beneficio en términos de rendimiento en comparación con una consulta que abarque toda la tabla. Si las consultas suelen devolver tan solo un reducido subconjunto de atributos y el tamaño total de estos atributos es mucho menor que la totalidad del elemento, proyecte solamente aquellos atributos que solicite habitualmente.

Si prevé que la actividad de escritura de una tabla va a ser muy superior a la de lectura, siga estas prácticas recomendadas:

  • Considere la posibilidad de proyectar menos atributos para minimizar el tamaño de los elementos que se escriben en el índice. No obstante, esto solo es aplicable si el tamaño de los atributos proyectados fuera mayor que una unidad de capacidad de escritura (1 KB). Por ejemplo, si el tamaño de una entrada de índice es de tan solo 200 bytes, DynamoDB la redondeará a 1 KB. Es decir, siempre y cuando los elementos del índice son pequeños, puede proyectar más atributos sin costo adicional.

  • Evite proyectar atributos si sabe que apenas los va a necesitar en las consultas. Cada vez que se actualiza un atributo que está proyectado en un índice, también se actualiza el índice, lo que tiene un costo adicional. Los atributos no proyectados se pueden recuperar en un solicitud Query, aunque con un costo superior en lo que se refiere al rendimiento aprovisionado. Sin embargo, el costo de la consulta puede ser mucho más bajo que el de actualizar el índice con frecuencia.

  • Especifique ALL solamente si desea que las consultas devuelvan el elemento de la tabla completo ordenado mediante una clave de ordenación distinta. Al proyectar todos los atributos, ya no será necesario recuperar la tabla. Sin embargo, en la mayoría de los casos, duplicará los costos de almacenamiento y de actividad de escritura.

Sopese la necesidad de mantener los índices con el menor tamaño posible frente a la necesidad de minimizar las actualizaciones lo máximo posible, tal y como se explica en la sección siguiente.

Optimización de las consultas frecuentes para evitar recuperaciones

Para acelerar al máximo las consultas con la mínima latencia posible, proyecte todos los atributos que crea que se van a devolver en esas consultas. En particular, si consulta un índice secundario local para buscar atributos que no están proyectados, DynamoDB recuperará automáticamente estos atributos de la tabla, lo que requiere que se lea todo el elemento de la tabla. Esto genera una latencia y unas operaciones de E/S adicionales que podrían evitarse.

Tenga en cuenta que, a menudo, las consultas "ocasionales" pueden convertirse en consultas "esenciales". Si hay atributos que no quiere proyectar porque prevé que solo los consultará ocasionalmente, piense en qué circunstancias esto podría cambiar y podría arrepentirse de no haberlos proyectado.

Para obtener más información sobre recuperaciones de tablas, consulte Consideraciones sobre el rendimiento aprovisionado para los índices secundarios locales.

Tener en cuenta los límites de tamaño de la colección de elementos al crear índices secundarios locales

Una colección de elementos contiene todos los elementos de una tabla y los índices secundarios globales que tienen la misma clave de partición. Ninguna colección de elementos puede superar los 10 GB, así que es posible que se agote el espacio para un determinado valor de clave de partición.

Cada vez que se agrega o actualiza un elemento de una tabla, DynamoDB actualiza todos los índices secundarios locales afectados. Si los atributos indexados se han definido en la tabla, los índices secundarios locales también aumentarán.

Cuando cree un índice secundario local, piense cuántos datos se van a escribir en él y cuántos de estos elementos de datos tendrán el mismo valor de clave de partición. Si prevé que la suma de los elementos de la tabla y del índice con un determinado valor de clave de partición podría ser superior a 10 GB, piense si debería evitar crear el índice.

Si no puede evitar crear el índice secundario local, tendrá que prever el límite de tamaño de la colección de elementos y adoptar medidas antes de superarlo. Como práctica recomendada, debe utilizar el ReturnItemCollectionMetricsparámetro al escribir elementos para supervisar y alertar sobre los tamaños de las colecciones de artículos que se acerquen al límite de tamaño de 10 GB. Si se supera el tamaño máximo de la colección de artículos, se producirán intentos fallidos de escritura. Puede mitigar los problemas de tamaño de la colección de artículos supervisando el tamaño de las colecciones de artículos y emitiendo alertas al respecto antes de que afecten a su solicitud.

nota

Una vez creado, no puede eliminar un índice secundario local.

Para obtener estrategias sobre cómo mantenerse dentro de los límites y adoptar medidas correctivas, consulte Límite del tamaño de una colección de elementos.