Principiante3 min de lectura

GSI vs LSI en DynamoDB

Tanto un Global Secondary Index (GSI) como un Local Secondary Index (LSI) te permiten hacer un Query por un atributo que no es la clave de tu tabla. No son intercambiables —las diferencias deciden cuál necesita un patrón.

Las diferencias que importan

GSILSI
Clave de particiónCualquier atributoLa misma que la tabla
Clave de ordenaciónCualquier atributoCualquier atributo
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 (estricto)
Límite de partición de 10 GBNoSí (por PK)

Una regla práctica

  • ¿Necesitas una clave de partición diferente (p. ej. buscar pedidos por status en lugar 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 conserva exactamente la clave de partición de la tabla y solo cambia la clave de ordenación— decidido de antemano, con lecturas de consistencia fuerte? 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 diferente obliga a un GSI; una clave de ordenación diferente en la misma partición es el único caso en el que encaja un LSI.

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

Si estás añadiendo 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