Principiante4 min di lettura

GSI vs LSI in DynamoDB

Sia un Global Secondary Index (GSI) sia un Local Secondary Index (LSI) ti permettono di fare Query per un attributo che non è la chiave della tua tabella. Non sono intercambiabili — le differenze decidono quale dei due serve a un pattern.

Qual è la differenza tra un GSI e un LSI in DynamoDB?

Un Global Secondary Index può usare qualsiasi attributo scalare di primo livello (String, Number o Binary) come chiave di partizione, ottiene una propria capacità e può essere aggiunto in qualsiasi momento — ma serve solo letture a coerenza finale. Un Local Secondary Index mantiene la stessa chiave di partizione della tabella con una chiave di ordinamento diversa, supporta letture fortemente coerenti e condivide la capacità della tabella, ma deve essere creato insieme alla tabella.

Le differenze che contano

GSILSI
Chiave di partizioneQualsiasi scalare (S/N/B)Stessa della tabella
Chiave di ordinamentoQualsiasi scalare (S/N/B)Qualsiasi scalare (S/N/B)
Quando si creaIn qualsiasi momentoSolo alla creazione della tabella
CoerenzaSolo finaleForte disponibile
CapacitàPropriaCondivide quella della tabella
Propagazione delle scrittureAsincrona (finale)Sincrona (atomica)
Max per tabella20 (default, aumentabile)5 (rigido)
Limite partizione 10 GBNoSì (per PK)

Una regola pratica

  • Ti serve una diversa (es. cercare gli ordini per status invece che per customer)? Ti serve un GSI — un LSI non può ripartizionare.
  • Ti serve un secondo ordine di ordinamento all'interno della stessa partizione — un LSI mantiene la chiave di partizione esatta della tabella e sostituisce solo una diversa chiave di ordinamento — deciso in anticipo, con letture ? Un LSI calza.

La scelta si riduce a una domanda — quale chiave stai cambiando:

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

Una chiave di partizione diversa impone un GSI; una chiave di ordinamento diversa sulla stessa partizione è l'unico caso in cui un LSI calza.

In pratica la maggior parte dei team ricorre quasi esclusivamente ai GSI: sono aggiungibili in seguito, scalati in modo indipendente e non soggetti al limite di 10 GB per partizione. Sovraccarica le chiavi di un singolo GSI per servire diversi pattern — vedi single-table design.

Se stai aggiungendo un GSI per eliminare uno Scan, ricorda che ha la propria capacità di lettura/scrittura. Dimensiona quel costo extra con il calcolatore di prezzi, e prova DynoTable per ispezionare gli attributi proiettati di un indice prima di impegnarti su di esso.

Aggiornato