Uso de índices secundarios para mejorar el acceso a los datos - 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.

Uso de índices secundarios para mejorar el acceso a los datos

Amazon DynamoDB proporciona un acceso rápido a los elementos de una tabla especificando sus valores de clave principal. Sin embargo, muchas aplicaciones podrían beneficiarse de disponer de una o varias claves secundarias (o alternativas) para permitir un acceso eficiente a datos con otros atributos aparte de la clave principal. Para responder a esta necesidad, puede crear uno o varios índices secundarios en una tabla y emitir solicitudes Query o Scan para estos índices.

Un índice secundario es una estructura de datos que contiene un subconjunto de atributos de una tabla, además de una clave alternativa para admitir las operaciones Query. Puede recuperar datos del índice usando una operación Query prácticamente de la misma forma que Query se usa en una tabla. Una tabla puede tener varios índices secundarios, lo que permite a las aplicaciones obtener acceso a distintos patrones de consulta.

nota

También se pueden utilizar operaciones Scan en los índices, de un modo bastante similar a como Scan se usaría en una tabla.

Cada índice secundario está asociado exactamente con una tabla de la que obtiene sus datos. Esta se denomina tabla base del índice. Al crear un índice, se define una clave alternativa para él (clave de partición y clave de ordenación). También se definen los atributos de la tabla base que se desea proyectar, o copiar, en el índice. DynamoDB copia estos atributos en el índice, junto con los atributos de clave principal de la tabla base. A partir de ese momento, puede consultar o examinar el índice exactamente igual que una tabla.

DynamoDB mantiene automáticamente cada índice secundario. Cuando se agregan, modifican o eliminan elementos en la tabla base, los índices basados en esa tabla se actualizan también para reflejar estos cambios.

DynamoDB admite dos tipos de índices secundarios:

  • Índice secundario global: índice con una clave de partición y una clave de ordenación que pueden diferir de las claves 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. Un índice secundario global se almacena en su propio espacio de partición lejos de la tabla base y se escala por separado de la tabla base.

  • Índice secundario local: índice que tiene la misma clave de partición que la tabla base, pero una clave de ordenación distinta. 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.

Para ver una comparación de los índices secundarios globales y los índices secundarios locales, consulte este vídeo.

Debe tener en cuenta los requisitos de la aplicación al determinar qué tipo de índice va a utilizar. En la siguiente tabla se muestran las principales diferencias entre un índice secundario global y un índice secundario local.

Característica Índice secundario global Índice secundario local
Esquema de claves La clave principal de un índice secundario global puede ser simple (clave de partición) o compuesta (clave de partición y clave de ordenación). La clave principal de un índice secundario local debe ser compuesta (clave de partición y clave de ordenación).
Atributos de clave La clave de partición y la clave de ordenación (si procede) del índice pueden ser cualesquiera atributos de tipo String, Number o Binary de la tabla base. La clave de partición del índice es el mismo atributo que la clave de partición de la tabla base. La clave de ordenación puede ser cualquier atributo de tipo String, Number o Binary de la tabla base.
Restricciones de tamaño por valor de clave de partición No hay restricciones de tamaño para los índices secundarios globales. Para cada valor de clave de partición, el tamaño total de todos los elementos indexados debe ser de 10 GB o menos.
Operaciones online con índices Los índices secundarios globales se pueden crear al mismo tiempo que se crea una tabla. También puede agregar un nuevo índice secundario global a una tabla existente o eliminar un índice secundario global existente. Para obtener más información, consulte Administración de índices secundarios globales. Los índices secundarios locales se crean a la vez que se crea la tabla. No se puede agregar un índice secundario local a una tabla existente, ni tampoco se puede eliminar ningún índice secundario local que ya exista.
Consultas y particiones Un índice secundario global permite realizar consultas en toda la tabla y en todas las particiones. Un índice secundario local permite consultar una sola partición, según lo especificado por el valor de clave de partición de la consulta.
Consistencia de lectura Las consultas a los índices secundarios globales solo admiten la consistencia final. Cuando se realiza una consulta en un índice secundario local, se puede elegir entre la consistencia final o alta.
Consumo de desempeño provisionado Cada índice secundario global tiene su propia configuración de rendimiento aprovisionado para la actividad de lectura y escritura. Las consultas o exámenes de un índice secundario global consumen unidades de capacidad del índice, no de la tabla base. Esto mismo sucede con las actualizaciones de los índices secundarios globales debidas a escrituras en la tabla. Un índice secundario global asociado a las tablas globales consume unidades de capacidad de escritura. Las consultas o análisis de un índice secundario local consumen unidades de capacidad de lectura de la tabla base. Al escribir en una tabla, sus índices secundarios locales también se actualizan y estas actualizaciones consumen unidades de capacidad de escritura de la tabla base. Un índice secundario local asociado a las tablas globales consume unidades de capacidad de escritura replicadas.
Atributos proyectados Cuando se consulta o analiza un índice secundario global, solo se pueden solicitar los atributos que se han proyectado en él. DynamoDB no recupera ningún atributo de la tabla. Cuando se consulta o analiza un índice secundario local, se pueden solicitar los atributos que no se hayan proyectado en él. DynamoDB recuperará automáticamente estos atributos de la tabla.

Si desea crear más de una tabla con índices secundarios, debe hacerlo de forma secuencial. Por ejemplo, tendría que crear la primera tabla y esperar a que su estado fuese ACTIVE, luego la siguiente tabla y esperar a que adquiriese el estado ACTIVE, y así sucesivamente. Si intenta crear simultáneamente más de una tabla con un índice secundario, DynamoDB devuelve una excepción LimitExceededException.

Cada índice secundario usa la misma clase de tabla y el mismo modo de capacidad que la tabla base a la que está asociado. Para cada índice secundario debe especificar lo siguiente:

  • Tipo de índice que se va a crear, ya sea un índice secundario global o un índice secundario local.

  • El nombre del índice. Las reglas de nomenclatura de los índices son las mismas que para las tablas, como se indica en Cuotas de tabla, servicio y cuenta en Amazon DynamoDB. El nombre debe ser único para la tabla base al que está asociado, pero puede utilizar el mismo nombre para índices que estén asociados a tablas base distintas.

  • El esquema de claves del índice. Cada atributo del esquema de claves del índice debe ser un atributo de nivel superior debe de tipo String, Number y Binary. No se permiten otros tipos de datos, como los documentos y los conjuntos. Los demás requisitos del esquema de claves dependen del tipo de índice:

    • Si se trata de un índice secundario global, la clave de partición puede ser cualquier atributo escalar de la tabla base. La clave de ordenación es opcional y también puede ser cualquier atributo escalar de la tabla base.

    • Si se trata de un índice secundario local, la clave de partición debe ser igual que la tabla de partición de la tabla base y la clave de ordenación debe ser un atributo sin clave de la tabla base.

  • Los atributos adicionales, si los hay, de la tabla base que se proyectarán en el índice. Estos atributos se agregan a los atributos de clave de la tabla, que se proyectan de forma automática en cada índice. Puede proyectar atributos de cualquier tipo de datos, incluidos escalares, documentos y conjuntos.

  • Los ajustes de desempeño provisionado del índice, si es preciso:

    • Para un índice secundario global, debe especificar los ajustes de unidades de capacidad de lectura y escritura. Estos ajustes de desempeño provisionado son independientes de los ajustes de la tabla base.

    • Para un índice secundario local, no es preciso especificar los ajustes de unidades de capacidad de lectura y escritura. Todas las operaciones de lectura y escritura en un índice secundario local consumen el rendimiento aprovisionado configurado para su tabla base.

Para disfrutar de la máxima flexibilidad en las consultas, puede crear hasta 20 índices secundarios globales (cuota predeterminada) y hasta 5 índices secundarios locales por tabla.

Para las siguientes regiones de AWS, la cuota de los índices secundarios globales es de cinco:

  • AWS GovCloud (EE. UU. este)

  • AWS GovCloud (EE. UU. oeste)

  • Europa (Estocolmo)

Para obtener un listado detallado de índices secundarios en una tabla, utilice la operación DescribeTable. DescribeTable devuelve el nombre, el tamaño de almacenamiento y el recuento de elementos de cada índice secundario de la tabla. Estos valores no se actualizan en tiempo real, sino aproximadamente cada seis horas.

Para obtener acceso a los datos de un índice secundario, utilice las operaciones Query o Scan. Debe especificar el nombre de la tabla base y el nombre del índice que se desea utilizar, los atributos que se devolverán en los resultados y las expresiones de condición o filtros que se van a aplicar. DynamoDB puede devolver los resultados en orden ascendente o descendente.

Al eliminar una tabla, todos los índices asociados a ella se eliminan también.

Para obtener las prácticas recomendadas, consulte Prácticas recomendadas para utilizar índices secundarios en DynamoDB.