GSI vs LSI no DynamoDB
Tanto um Global Secondary Index (GSI) quanto um Local Secondary Index (LSI) permitem
Query por um atributo que não é a chave da sua tabela. Eles não são
intercambiáveis — as diferenças decidem qual deles um padrão precisa.
Qual é a diferença entre uma GSI e uma LSI no DynamoDB?
Uma Global Secondary Index pode usar qualquer atributo escalar de nível superior (String, Number ou Binary) como sua chave de partição, ganha sua própria capacidade e pode ser adicionada a qualquer momento — mas só serve leituras eventualmente consistentes. Uma Local Secondary Index mantém a mesma chave de partição da tabela com uma chave de ordenação diferente, suporta leituras fortemente consistentes e compartilha a capacidade da tabela, mas precisa ser criada junto com a tabela.
As diferenças que importam
| GSI | LSI | |
|---|---|---|
| Chave de partição | Qualquer escalar (S/N/B) | Mesma da tabela |
| Chave de ordenação | Qualquer escalar (S/N/B) | Qualquer escalar (S/N/B) |
| Quando criada | A qualquer momento | Só na criação da tabela |
| Consistência | Apenas eventual | Forte disponível |
| Capacidade | Própria | Compartilha a da tabela |
| Propagação de escrita | Assíncrona (eventual) | Síncrona (atômica) |
| Máx. por tabela | 20 (padrão, elevável) | 5 (rígido) |
| Limite de partição de 10 GB | Não | Sim (por PK) |
Uma regra de bolso
- Precisa de uma diferente (ex.: buscar pedidos por
statusem vez decustomer)? Você precisa de uma GSI — uma LSI não pode reparticionar. - Precisa de uma segunda ordem de ordenação dentro da mesma partição — uma LSI mantém a chave de partição exata da tabela e só troca uma chave de ordenação diferente — decidida de antemão, com leituras ? Uma LSI encaixa.
A escolha se reduz a uma pergunta — qual chave você está mudando:
Uma chave de partição diferente força uma GSI; uma chave de ordenação diferente na mesma partição é o único caso em que uma LSI encaixa.
Na prática, a maioria dos times recorre a GSIs quase exclusivamente: elas são adicionáveis depois, escaladas de forma independente, e não estão sujeitas ao limite de 10 GB por partição. Sobrecarregue as chaves de uma única GSI para servir vários padrões — veja design de tabela única.
Se você está adicionando uma GSI para matar um Scan, lembre-se de que ela tem sua própria capacidade de leitura/escrita. Dimensione esse custo extra com a calculadora de preços, e experimente o DynoTable para inspecionar os atributos projetados de um índice antes de se comprometer com ele.