0Pricing
Cloud & IT Cert Prep · Lektion

Globale und lokale sekundäre Indizes

Fügen Sie GSI und LSI hinzu, um alternative Abfragemuster zu unterstützen, ohne Tabellen zu duplizieren.

Globale und lokale sekundäre Indizes ist eine kostenlose Cloud & IT Cert Prep-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cloud & IT Cert Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cloud & IT Cert Prep-Kurs umfasst insgesamt 4 Lektionen.

Warum Secondary Indexes existieren

Der Primärschlüssel von DynamoDB definiert den einzigen effizienten Abfragepfad einer Tabelle. Wenn Sie Elemente anhand eines anderen Attributs abfragen müssen – beispielsweise alle Bestellungen für eine Produkt-ID finden möchten, während der Partition Key der Tabelle CustomerId lautet –, müssten Sie ohne Secondary Index einen teuren Scan ausführen.

Secondary Indexes lösen dieses Problem, indem sie eine separate, automatisch aktualisierte Kopie der Daten verwalten, die nach einem anderen Schlüssel strukturiert ist. DynamoDB bietet zwei Typen: Global Secondary Indexes (GSI) und Local Secondary Indexes (LSI), die jeweils unterschiedliche Vor- und Nachteile haben.

Grundlagen des Global Secondary Index (GSI)

Mit einem Global Secondary Index können Sie einen vollständig anderen Partition Key (und optional einen Sort Key) als in der Basistabelle definieren. Der GSI ist tatsächlich global und erstreckt sich über alle Partitionen der Basistabelle. Sie können einen GSI abfragen, um Elemente anhand jedes Attributs zu finden, das Sie als Partition Key des GSI definiert haben.

GSIs verfügen über einen eigenen bereitgestellten Durchsatz (oder übernehmen den On-Demand-Modus), unabhängig von der Basistabelle. Sie können bis zu 20 GSIs pro Tabelle erstellen und GSIs jederzeit zu einer bestehenden Tabelle hinzufügen oder daraus löschen.

# Create a table with a GSI on ProductId
aws dynamodb create-table \
  --table-name Orders \
  --attribute-definitions \
    AttributeName=OrderId,AttributeType=S \
    AttributeName=ProductId,AttributeType=S \
    AttributeName=OrderDate,AttributeType=S \
  --key-schema AttributeName=OrderId,KeyType=HASH \
  --global-secondary-indexes '[
    {
      "IndexName": "ProductId-OrderDate-index",
      "KeySchema": [
        {"AttributeName": "ProductId", "KeyType": "HASH"},
        {"AttributeName": "OrderDate", "KeyType": "RANGE"}
      ],
      "Projection": {"ProjectionType": "ALL"},
      "ProvisionedThroughput": {"ReadCapacityUnits": 10, "WriteCapacityUnits": 5}
    }
  ]' \
  --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5

Grundlagen des Local Secondary Index (LSI)

Ein Local Secondary Index verwendet denselben Partition Key wie die Basistabelle, aber einen anderen Sort Key. LSIs sind „lokal“, weil sie nur innerhalb einer einzelnen Partition abfragen (also Elemente mit demselben Partition Key). Dadurch eignen sich LSIs ideal, um die Bestellungen eines bestimmten Kunden nach unterschiedlichen Attributen zu sortieren und abzufragen.

LSIs müssen zum Zeitpunkt der Tabellenerstellung definiert werden – später können Sie sie weder hinzufügen noch entfernen. Jede Tabelle kann bis zu 5 LSIs enthalten. LSIs teilen sich die bereitgestellte Kapazität der Basistabelle (kein separater Durchsatz) und unterliegen dem Speicherlimit von 10 GB pro Partition Key für die Kombination aus Basistabellen- und LSI-Daten.

# Create a table with an LSI (at creation time only)
aws dynamodb create-table \
  --table-name Orders \
  --attribute-definitions \
    AttributeName=CustomerId,AttributeType=S \
    AttributeName=OrderDate,AttributeType=S \
    AttributeName=TotalAmount,AttributeType=N \
  --key-schema \
    AttributeName=CustomerId,KeyType=HASH \
    AttributeName=OrderDate,KeyType=RANGE \
  --local-secondary-indexes '[{
    "IndexName": "TotalAmount-index",
    "KeySchema": [
      {"AttributeName": "CustomerId", "KeyType": "HASH"},
      {"AttributeName": "TotalAmount", "KeyType": "RANGE"}
    ],
    "Projection": {"ProjectionType": "ALL"}
  }]' \
  --billing-mode PAY_PER_REQUEST

GSI vs. LSI: Die wichtigsten Unterschiede

Hier ist ein direkter Vergleich für eine klare Prüfungsvorbereitung:

  • Partitionsschlüssel: GSI kann sich von der Basistabelle unterscheiden; LSI muss mit der Basistabelle übereinstimmen
  • Sortierschlüssel: Beide unterstützen einen anderen Sortierschlüssel als die Basistabelle
  • Erstellungszeitpunkt: GSI jederzeit; LSI nur bei der Tabellenerstellung
  • Durchsatz: GSI verfügt über einen eigenen Durchsatz; LSI teilt den Durchsatz der Basistabelle
  • Konsistenz: GSI-Lesevorgänge sind nur eventual consistent; LSI-Lesevorgänge können strongly consistent sein
  • Limits: bis zu 20 GSIs; bis zu 5 LSIs pro Tabelle

Projektionstypen

Beim Erstellen eines Index wählen Sie aus, welche Attribute in ihn projiziert (kopiert) werden:

  • KEYS_ONLY: nur der Primärschlüssel der Basistabelle und der Indexschlüssel – kleinster Index, erfordert zusätzliche GetItem-Aufrufe für Nichtschlüsselattribute
  • INCLUDE: Schlüsselattribute sowie eine bestimmte Liste zusätzlicher Attribute, die Sie angeben – ausgewogenes Verhältnis zwischen Größe und Zugriffsmuster
  • ALL: alle Attribute werden in den Index projiziert – größte Flexibilität, höhere Speicher- und Schreibkosten

Wählen Sie den Projektionstyp danach aus, welche Attribute Ihre Abfragen tatsächlich benötigen. Eine Überprojektion verschwendet bei jedem Schreibvorgang WCUs; eine Unterprojektion erzwingt zusätzliche GetItem-Aufrufe, um nicht im Index enthaltene Attribute abzurufen.

Eine GSI abfragen

Das Abfragen einer GSI verwendet dieselbe Query-API, gibt jedoch den Parameter --index-name an. Die Abfrage wird anhand des Schlüsselschemas der GSI und nicht anhand des Schlüsselschemas der Basistabelle ausgeführt. GSI-Abfragen sind immer eventual consistent – die GSI wird nach Schreibvorgängen in der Basistabelle asynchron aktualisiert, sodass es zu einer kurzen Verzögerung kommt.

Wenn ein Element in der Basistabelle nicht über das Partitionsschlüsselattribut der GSI verfügt, wird es überhaupt nicht in die GSI aufgenommen (Muster eines sparsamen Index). Dies ist eine leistungsstarke Technik, um nur eine Teilmenge von Elementen zu indizieren, beispielsweise alle Bestellungen mit dem Status PENDING, wenn der GSI-Partitionsschlüssel Status lautet.

# Query the GSI for all orders for a product in 2026
aws dynamodb query \
  --table-name Orders \
  --index-name ProductId-OrderDate-index \
  --key-condition-expression 'ProductId = :pid AND OrderDate BETWEEN :start AND :end' \
  --expression-attribute-values \
    '{":pid":{"S":"prod-abc"},":start":{"S":"2026-01-01"},":end":{"S":"2026-12-31"}}'

Muster eines sparsamen Index

Ein sparsamer Index nutzt die Tatsache, dass DynamoDB Elemente nur dann in eine GSI projiziert, wenn sie einen Wert für den Partitionsschlüssel der GSI besitzen. Indem Sie den Partitionsschlüssel der GSI für ein Attribut definieren, das nur bei einigen Elementen vorhanden ist, erstellen Sie einen Index, der nur diese Teilmenge enthält.

Beispiel: In einer Orders-Tabelle besitzen nur noch nicht versendete Bestellungen ein Attribut PendingShipmentDate. Eine GSI für PendingShipmentDate enthält daher automatisch nur noch nicht versendete Bestellungen. So lassen sich alle ausstehenden Bestellungen äußerst effizient abfragen, ohne die gesamte Tabelle zu durchsuchen.

Schreib-Sharding mit GSI-Überladung

GSI-Überladung ist eine fortgeschrittene Technik für das Single-Table-Design. Dabei speichern Sie verschiedene Entitätstypen in einer Tabelle und verwenden ein generisches GSI-Schlüsselattribut (z. B. GSI1PK und GSI1SK), das abhängig vom Elementtyp mit unterschiedlichen Mustern befüllt wird. Dadurch erhält jeder Entitätstyp über eine einzige GSI einen eigenen effizienten Abfragepfad.

Beispiel: Für User-Elemente setzen Sie GSI1PK = 'COUNTRY#US' und GSI1SK = username; für Order-Elemente setzen Sie GSI1PK = 'STATUS#PENDING' und GSI1SK = orderDate. Wenn Sie die GSI mit dem passenden Präfix abfragen, wird der gewünschte Entitätstyp effizient abgerufen.

Drosselung und Kapazität von Indizes

Die Drosselung einer GSI erfolgt unabhängig von der Basistabelle. Wenn die bereitgestellten WCUs der GSI zu niedrig sind, werden Schreibvorgänge für Elemente, die in die GSI projiziert werden, gedrosselt – selbst wenn die Basistabelle über ausreichend Kapazität verfügt. Überwachen Sie ConsumedWriteCapacityUnits und ThrottledRequests für jede GSI separat.

Ein häufiger Fehler besteht darin, für die GSI eine geringere Kapazität als für die Basistabelle bereitzustellen und anschließend eine Drosselung zu erleben, wenn ein Schreibmuster die Schreibrate der GSI plötzlich erhöht. Verwenden Sie Auto Scaling für GSIs oder wählen Sie den On-Demand-Modus, um dies zu vermeiden.

Wann Sie GSI, LSI oder eine Neugestaltung verwenden sollten

Entscheidungshilfen für die SAA-C03-Prüfung:

  • Sie müssen nach einem völlig anderen Attribut abfragen → GSI
  • Sie müssen innerhalb derselben Partition abfragen, aber anders sortieren, und kennen diese Anforderung bereits bei der Erstellung → LSI
  • Sie benötigen stark konsistente Lesevorgänge für einen alternativen Sortierschlüssel → LSI (einzige Option, da GSIs eventual consistent sind)
  • Sie haben zehn oder mehr unterschiedliche Abfragemuster → Ziehen Sie ein Single-Table-Design mit GSI-Überladung statt vieler separater Tabellen in Betracht
  • Sie müssen lediglich alle Elemente zur Analyse abrufen → Überdenken Sie, ob DynamoDB die geeignete Datenbank ist

GSIs löschen und nachträglich befüllen

Sie können eine GSI jederzeit löschen, ohne die Basistabelle zu beeinträchtigen. Wenn Sie einer bestehenden Tabelle eine neue GSI hinzufügen, befüllt DynamoDB den Index asynchron nach, indem die Basistabelle durchsucht wird – bei großen Tabellen kann dies Minuten bis Stunden dauern. Während dieses Vorgangs bleibt die Basistabelle für Lese- und Schreibvorgänge vollständig verfügbar.

Sie können den Fortschritt des Nachfüllens in der Konsole oder über die DescribeTable-API überwachen, indem Sie das Feld IndexStatus des Index prüfen. Während des Vorgangs lautet es CREATING, nach Abschluss ACTIVE. Fragen Sie die GSI erst ab, wenn sie den Status ACTIVE hat.

# Check GSI status during backfill
aws dynamodb describe-table \
  --table-name Orders \
  --query 'Table.GlobalSecondaryIndexes[*].{Name:IndexName,Status:IndexStatus}'

Kurze Überprüfung

Testen Sie Ihr Verständnis der AWS-Solutions-Architect-Konzepte (SAA-C03) aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: GSIs stellen alternative Partitionsschlüssel bereit und können jederzeit hinzugefügt werden, LSIs verwenden denselben Partitionsschlüssel wie die Basistabelle und müssen bei der Erstellung definiert werden und Projektionstypen bestimmen, welche Attribute in den Index kopiert werden. GSIs unterstützen für fortgeschrittene Flexibilität bei Abfragen Muster wie sparsame Indizes und Überladung. Als Nächstes befassen wir uns mit DynamoDB Streams und Global Tables.

Häufig gestellte Fragen

Ist die Lektion „Globale und lokale sekundäre Indizes“ kostenlos?

Ja — der vollständige Text von „Globale und lokale sekundäre Indizes“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cloud & IT Cert Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cloud & IT Cert Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Globale und lokale sekundäre Indizes“?

Fügen Sie GSI und LSI hinzu, um alternative Abfragemuster zu unterstützen, ohne Tabellen zu duplizieren. Du übst Cloud & IT Cert Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cloud & IT Cert Prep zu starten?

Keine Vorkenntnisse erforderlich. Cloud & IT Cert Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Globale und lokale sekundäre Indizes“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cloud & IT Cert Prep-Lektion Code schreiben und ausführen?

Ja. Jede Cloud & IT Cert Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Tabellen, Elemente und Primärschlüssel
  2. Bereitgestellte vs. On-Demand-Kapazität
  3. Globale und lokale sekundäre Indizes
  4. DynamoDB Streams und globale Tabellen
← Zurück zu Cloud & IT Cert Prep