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
| GSI | LSI | |
|---|---|---|
| Clave de partición | Cualquier escalar (S/N/B) | La misma que la tabla |
| Clave de ordenación | Cualquier escalar (S/N/B) | Cualquier escalar (S/N/B) |
| Cuándo se crea | En cualquier momento | Solo al crear la tabla |
| Consistencia | Solo eventual | Fuerte disponible |
| Capacidad | La suya propia | Comparte la de la tabla |
| Propagación de escritura | Asíncrona (eventual) | Síncrona (atómica) |
| Máximo por tabla | 20 (por defecto, ampliable) | 5 (rígido) |
| Límite de 10 GB por partición | No | Sí (por PK) |
Una regla general
- ¿Necesitas una distinta (p. ej. buscar pedidos por
statusen vez de porcustomer)? 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:
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.