Iniciante4 min de leitura

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

GSILSI
Chave de partiçãoQualquer escalar (S/N/B)Mesma da tabela
Chave de ordenaçãoQualquer escalar (S/N/B)Qualquer escalar (S/N/B)
Quando criadaA qualquer momentoSó na criação da tabela
ConsistênciaApenas eventualForte disponível
CapacidadePrópriaCompartilha a da tabela
Propagação de escritaAssíncrona (eventual)Síncrona (atômica)
Máx. por tabela20 (padrão, elevável)5 (rígido)
Limite de partição de 10 GBNãoSim (por PK)

Uma regra de bolso

  • Precisa de uma diferente (ex.: buscar pedidos por status em vez de customer)? 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:

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

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.

Atualizado