Principiante4 min de lectura

GSI vs LSI en DynamoDB

Tanto un índice secundario global (GSI) como un índice secundario local (LSI) te dejan hacer Query por un atributo que no es la clave de tu tabla. No son intercambiables — las diferencias deciden cuál necesita un patrón.

¿Cuál es la diferencia entre un GSI y un LSI en DynamoDB?

Un índice secundario global puede usar cualquier atributo escalar de nivel superior (String, Number o Binary) como su clave de partición, obtiene su propia capacidad y se puede añadir en cualquier momento — pero solo sirve lecturas eventualmente consistentes. Un índice secundario local mantiene la misma clave de partición de la tabla con una clave de ordenación distinta, admite lecturas fuertemente consistentes y comparte la capacidad de la tabla, pero debe crearse junto con la tabla.

Las diferencias que importan

GSILSI
Clave de particiónCualquier escalar (S/N/B)La misma que la tabla
Clave de ordenaciónCualquier escalar (S/N/B)Cualquier escalar (S/N/B)
Cuándo se creaEn cualquier momentoSolo al crear la tabla
ConsistenciaSolo eventualFuerte disponible
CapacidadLa suya propiaComparte la de la tabla
Propagación de escrituraAsíncrona (eventual)Síncrona (atómica)
Máximo por tabla20 (por defecto, ampliable)5 (rígido)
Límite de 10 GB por particiónNoSí (por PK)

Una regla general

  • ¿Necesitas una distinta (p. ej. buscar pedidos por status en vez de por customer)? Necesitas un GSI — un LSI no puede reparticionar.
  • ¿Necesitas un segundo orden de ordenación dentro de la misma partición — un LSI mantiene la clave de partición exacta de la tabla y solo cambia una clave de ordenación distinta — decidido de antemano, con lecturas ? Un LSI encaja.

La elección se reduce a una pregunta — qué clave estás cambiando:

YesNo, same PKnew sort keyNeed to queryanother way?Differentpartition key?GSILSIOwn partitionsEventual readsOwn capacityAdd anytimeShared partitionStrong reads OKShared capacityTable-creation only

Una clave de partición distinta obliga a un GSI; una clave de ordenación distinta sobre la misma partición es el único caso en que un LSI encaja.

En la práctica la mayoría de los equipos recurren casi exclusivamente a los GSI: se pueden añadir después, se escalan de forma independiente y no están sujetos al límite de 10 GB por partición. Sobrecarga las claves de un solo GSI para servir varios patrones — ver diseño de tabla única.

Si vas a añadir un GSI para eliminar un Scan, recuerda que tiene su propia capacidad de lectura/escritura. Dimensiona ese coste extra con la calculadora de precios, y prueba DynoTable para inspeccionar los atributos proyectados de un índice antes de comprometerte con él.

Actualizado