Unterstützt DynamoDB Sekundärindizes?
Ja. DynamoDB unterstützt zwei Arten von Sekundärindizes. Ein Global Secondary Index (GSI) hat seinen eigenen Partition-/Sort-Key und eigene Kapazität (standardmäßig 20 pro Tabelle, letztendlich konsistent). Ein Local Secondary Index (LSI) teilt sich den Partition Key der Tabelle mit einem anderen Sort Key, unterstützt starke Konsistenz und muss bei der Tabellenerstellung definiert werden.
Global Secondary Index (GSI)
- Eigener Partition- und Sort Key, unabhängig von dem der Tabelle.
- Eigener provisionierter Durchsatz (oder On-Demand-Kapazität).
- Nur letztendlich konsistente Reads.
- Jederzeit hinzufügbar oder entfernbar; Standardkontingent von 20 pro Tabelle.
Ein GSI ist die Art, wie du Items über ein Attribut außerhalb des Primary Key der Tabelle nachschlägst.
Local Secondary Index (LSI)
- Teilt sich den Partition Key der Tabelle, mit einem anderen Sort Key.
- Teilt sich den Durchsatz der Tabelle.
- Unterstützt stark konsistente Reads.
- Muss bei der Tabellenerstellung angelegt werden und kann später nicht ergänzt werden.
Die zwei Unterschiede, die du messen kannst
Ein GSI-Read stuft sich nicht stillschweigend herab, wenn du starke Konsistenz verlangst. Er scheitert:
ValidationException: Consistent reads are not supported on global secondary indexes
HTTP 400Dieselbe Abfrage mit ConsistentRead: true gegen einen LSI gelingt und meldet ConsumedCapacity 1.0, während der letztendlich konsistente Read desselben Items 0.5 meldet. Starke Konsistenz ist auf einem LSI verfügbar, zum doppelten Preis in Leseeinheiten.
Der zweite Unterschied liegt bei den Writes, und er ist der, der auf der Rechnung auftaucht. Dasselbe 920-Byte-Item in drei Tabellen abzulegen, die sich nur darin unterscheiden, wie viele GSIs sie tragen:
0 GSIs ConsumedCapacity 1 table 1
1 GSI ConsumedCapacity 2 table 1, gsi1 1
2 GSIs ConsumedCapacity 3 table 1, gsi1 1, gsi2 1Jeder GSI, der ein geändertes Attribut projiziert, ist ein weiterer Write, den du bezahlst. AWS formuliert die Regel, die die Zahlen zeigen: Die Schreibkosten sind "the sum of write capacity units consumed by writing to the base table and those consumed by updating the global secondary indexes". Eine KEYS_ONLY-Projection ist die Art, wie du diesen zweiten Write klein hältst.
Zwischen ihnen wählen
Greif zu einem GSI für neue Zugriffsmuster und Flexibilität; greif zu einem LSI, wenn du starke Konsistenz auf einer alternativen Sortierung innerhalb derselben Partition brauchst.
Tiefer einsteigen
Vergleiche sie in GSI vs LSI und sieh dir Index-Projections an. Lade DynoTable herunter, um über deine Indizes abzufragen.
Referenzen
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation; Kontingente am 2026-07-28 erneut geprüft.
Der Fehlerstring und die ConsumedCapacity-Werte wurden am 2026-07-28 gegen DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 aufgezeichnet und sind die eigene Ausgabe der Engine.