Saltar al contenido

Índices secundarios globales frente a locales en DynamoDB

Solución:

Cada elemento en Dynamo debe tener un único Clave primaria. La clave principal es el índice de la tabla base. Una clave primaria debe tener un clave de partición y opcionalmente puede tener un clave de rango (también llamada clave de clasificación). Dentro de una partición, los elementos se ordenan por clave de rango. Acceder a elementos usando una clave de partición es rápido.

Los índices secundarios le permiten consultar la tabla utilizando una clave alternativa. Un índice secundario local (LSI) tiene la misma clave de partición que la clave principal (índice), pero una clave de rango diferente. La forma de pensar en un LSI es que son los mismos datos que el índice principal (clave), simplemente ordenados por un atributo diferente.

Un índice secundario global (GSI) tiene una clave de partición diferente a la clave principal y, por lo tanto, es un conjunto de datos diferente.

Una de las diferencias importantes entre un LSI y GSI es que un LSI toma su capacidad de rendimiento de la tabla base, donde ya ha comprado la capacidad de rendimiento de GSI por separado. Dicho de otra manera, un LSI no le cuesta nada y un GSI incurre en un costo adicional sobre su mesa base.

Echemos un vistazo al ejemplo de la mesa musical. Digamos que la tabla base tiene este esquema;

Artist: (Primary Key) Partition Key
SongTitle: (Primary Key) Range Key
AlbumTitle:
DateOfRelease:

Esta tabla es una lista de canciones. Puedo acceder a todas las canciones de un artista de manera muy eficiente (es decir, consultar por Artista usando la tecla de partición). Cuando hago esta consulta, las canciones serán ordenadas por SongTitle. También puedo acceder a canciones por artista y título de canción de manera muy eficiente utilizando la clave principal única.

Ahora digamos que quiero obtener todas las canciones de un artista pero ordenadas por DateOfRelease. En el esquema actual, necesitaría obtener todas las canciones y luego ordenarlas en mi aplicación. Una buena alternativa sería crear un nuevo índice, con una clave de partición de Artista y una clave de rango DateOfRelease. Esta será una LSI porque la clave de partición del índice (Artista) es la misma que la clave de partición de la clave principal. No necesito comprar capacidad de rendimiento adicional, ya que este índice se aprovisionará solo a partir de la capacidad de la mesa base.

Ahora digamos que quiero acceder a las canciones por AlbumTitle, ordenadas por SongTitle, es decir, crear listas de álbumes. Para hacer esto de manera eficiente, creo un nuevo índice con la clave de partición AlbumTitle y la clave de rango SongTitle. Esta es una GSI porque la clave de partición es diferente a la clave principal. Este GSI debe aprovisionarse por separado de la mesa base y, por lo tanto, tiene un costo adicional.

En respuesta a tu pregunta, GenreAlbumTitle es un GSI porque tiene una clave de partición diferente a la Music.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *