Einsteiger3 Min. Lesezeit

GSI vs LSI in DynamoDB

Sowohl ein Global Secondary Index (GSI) als auch ein Local Secondary Index (LSI) lassen dich per Query über ein Attribut abfragen, das nicht der Schlüssel deiner Tabelle ist. Sie sind nicht austauschbar — die Unterschiede entscheiden, welcher für ein Muster nötig ist.

Die Unterschiede, die zählen

GSILSI
Partition KeyBeliebiges AttributGleicher wie die Tabelle
Sort KeyBeliebiges AttributBeliebiges Attribut
Wann erstelltJederzeitNur bei Tabellenerstellung
KonsistenzNur letztendlich konsistentStark konsistent verfügbar
KapazitätEigeneTeilt sich die der Tabelle
Schreib-PropagationAsync (letztendlich konsistent)Synchron (atomar)
Max pro Tabelle20 (Standard, anhebbar)5 (hart)
10-GB-PartitionsgrenzeNeinJa (pro PK)

Eine Faustregel

  • Brauchst du einen anderen Partition Key (z. B. Bestellungen per status statt per customer nachschlagen)? Dann brauchst du einen GSI — ein LSI kann nicht neu partitionieren.
  • Brauchst du eine zweite Sortierreihenfolge innerhalb derselben Partition — ein LSI behält den exakten Partition Key der Tabelle und tauscht nur einen anderen Sort Key ein — im Voraus entschieden, mit stark konsistenten Lesevorgängen? Dann passt ein LSI.

Die Wahl reduziert sich auf eine Frage — welchen Schlüssel änderst du:

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

Ein anderer Partition Key erzwingt einen GSI; ein anderer Sort Key auf derselben Partition ist der einzige Fall, in den ein LSI passt.

In der Praxis greifen die meisten Teams fast ausschließlich zu GSIs: sie sind später hinzufügbar, unabhängig skaliert und nicht der 10-GB-pro-Partition-Grenze unterworfen. Überlade die Schlüssel eines einzelnen GSI, um mehrere Muster zu bedienen — siehe Single-Table-Design.

Wenn du einen GSI hinzufügst, um einen Scan zu vermeiden, denk daran: er hat seine eigene Lese-/Schreibkapazität. Dimensioniere diese Zusatzkosten mit dem Preisrechner, und probiere DynoTable, um die projizierten Attribute eines Index zu inspizieren, bevor du dich darauf festlegst.

Aktualisiert