🌍 Índices Secundarios Globales (GSI) en DynamoDB
Un Índice Secundario Global (GSI) en Amazon DynamoDB permite consultar una tabla usando una clave de partición y/o ordenamiento distinta a la clave principal de la tabla. Es una herramienta muy poderosa para realizar consultas flexibles sin duplicar datos.
🧠 Diferencia entre LSI y GSI:
CaracterísticaLSIGSIClave de particiónIgual a la tabla principalPuede ser diferente a la tabla principalNúmero máximo por tablaHasta 5Hasta 20CreaciónSolo al crear la tablaSe puede agregar en cualquier momentoCapacidad de lecturaComparte capacidad con la tablaTiene su propia capacidad (on-demand o provisioned)
🏗️ Ejemplo de GSI
🎯 Tabla: Orders
Clave primaria: CustomerId (HASH) + OrderId (RANGE)
➕ GSI: StatusIndex
Clave GSI: Status (HASH) + OrderDate (RANGE)
Proyección: ALL
🔧 Crear un GSI con AWS CLI
aws dynamodb update-table \
--table-name Orders \
--attribute-definitions \
AttributeName=Status,AttributeType=S \
AttributeName=OrderDate,AttributeType=S \
--global-secondary-index-updates \
'[{
"Create": {
"IndexName": "StatusIndex",
"KeySchema": [
{ "AttributeName": "Status", "KeyType": "HASH" },
{ "AttributeName": "OrderDate", "KeyType": "RANGE" }
],
"Projection": {
"ProjectionType": "ALL"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
}
}
}]'
🔍 Consultar usando un GSI
aws dynamodb query \
--table-name Orders \
--index-name StatusIndex \
--key-condition-expression "Status = :status" \
--expression-attribute-values '{":status": {"S": "SHIPPED"}}'
✅ ¿Cuándo usar un GSI?
Usa un GSI cuando necesitas:
- Consultar por atributos distintos a la clave primaria.
- Realizar búsquedas eficientes por estado, categoría, ubicación, etc.
- Separar el rendimiento de consultas secundarias.