Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Dieser Abschnitt beschreibt, wie Sie globale sekundäre Indizes in Amazon DynamoDB erstellen, ändern und löschen.
Themen
Erstellen einer Tabelle mit globalen sekundären Indizes
Um eine Tabelle mit einem oder mehreren globalen sekundären Indizes zu erstellen, verwenden Sie CreateTable
mit dem Parameter GlobalSecondaryIndexes
. Für maximale Abfrageflexibilität können Sie bis zu 20 globale sekundäre Indizes pro Tabelle (Standardkontingent) erstellen.
Sie müssen ein Attribut angeben, das als Partitionsschlüssel des Index fungieren soll. Sie können optional ein weiteres Attribut für den Sortierschlüssel des Index festlegen. Diese beiden Schlüsselattribute müssen nicht mit den Schlüsselattributen in der Tabelle übereinstimmen. Beispielsweise TopScoreDateTime
sind in der GameScoresTabelle (sieheVerwenden globaler sekundärer Indizes in DynamoDB) TopScore
weder Schlüsselattribute noch Schlüsselattribute aufgeführt. Sie könnten einen globalen sekundären Index mit einem Partitionsschlüssel von TopScore
und einem Sortierschlüssel von TopScoreDateTime
erstellen. Sie könnten einen solchen Index verwenden, um festzustellen, ob eine Verbindung zwischen den Highscores und der Uhrzeit, an der ein Spiel stattfindet, besteht.
Jedes Schlüsselattribut eines Indexes muss ein Skalar des String
, Number
oder Binary
sein. (Es kann kein Dokument oder Satz sein.) Sie können Attribute jeden Datentyps in einen globalen sekundären Index projizieren. Dazu zählen skalare Werte, Dokumente und Sätze. Eine vollständige Liste der Datentypen finden Sie unter Datentypen.
Wenn Sie den bereitgestellten Modus verwenden, müssen Sie die ProvisionedThroughput
-Einstellungen für den Index, die aus ReadCapacityUnits
und WriteCapacityUnits
bestehen, bereitstellen. Diese Einstellungen des bereitgestellten Durchsatzes sind getrennt von denen der Tabelle, aber verhalten sich auf ähnliche Weise. Weitere Informationen finden Sie unter Überlegungen im Hinblick auf die bereitgestellte Durchsatzkapazität für globale sekundäre Indizes.
Globale sekundäre Indizes übernehmen den Lese-/Schreikapazitätsmodus aus der Basistabelle. Weitere Informationen finden Sie unter Überlegungen beim Wechseln der Kapazitätsmodi in DynamoDB.
Anmerkung
Backfill-Operationen und laufende Schreiboperationen teilen den Schreibdurchsatz innerhalb des globalen Sekundärindex. Beim Erstellen eines neuen Index kann es wichtig seinGSI, zu überprüfen, ob der gewählte Partitionsschlüssel zu einer ungleichmäßigen oder eingeschränkten Verteilung von Daten oder Verkehr auf die Partitionsschlüsselwerte des neuen Indexes führt. In diesem Fall werden möglicherweise Backfill- und Schreibvorgänge gleichzeitig auftreten und Schreibvorgänge in die Basistabelle drosseln. Der Service ergreift Maßnahmen, um das Potenzial für dieses Szenario zu minimieren, hat jedoch keinen Einblick in die Form von Kundendaten in Bezug auf den Indexpartitionsschlüssel, die gewählte Projektion oder die Spärlichkeit des Index-Primärschlüssels.
Wenn Sie vermuten, dass Ihr neuer globaler Sekundärindex möglicherweise enge oder verzerrte Daten oder Datenverkehrsverteilung über Partitionsschlüsselwerte hinweg aufweisen könnte, sollten Sie Folgendes berücksichtigen, bevor Sie betrieblich wichtigen Tabellen neue Indizes hinzufügen.
-
Es ist möglicherweise am sichersten, den Index zu einem Zeitpunkt hinzuzufügen, zu dem Ihre Anwendung den geringsten Datenverkehr steuert.
-
Erwägen Sie, CloudWatch Contributor Insights für Ihre Basistabelle und Indizes zu aktivieren. Dies gibt Ihnen wertvolle Einblicke in Ihre Verkehrsverteilung.
-
Stellen Sie für Basistabellen und Indizes im bereitgestellten Kapazitätsmodus die bereitgestellte Schreibkapazität Ihres neuen Index auf mindestens das Doppelte der Ihrer Basistabelle ein. Beobachten Sie
WriteThrottleEvents
ThrottledRequests
,OnlineIndexPercentageProgress
,OnlineIndexConsumedWriteCapacity
undOnlineIndexThrottleEvents
CloudWatch Kennzahlen während des gesamten Prozesses. Passen Sie die bereitgestellte Schreibkapazität nach Bedarf an, um die Verfüllung in angemessener Zeit abzuschließen, ohne dass erhebliche Auswirkungen auf Ihre laufenden Vorgänge auftreten. -
Seien Sie bereit, die Indexerstellung abzubrechen, wenn Sie aufgrund der Schreibdrosselung betriebliche Beeinträchtigungen feststellen und eine Erhöhung der bereitgestellten Schreibkapazität in Ihrem neuen System das Problem GSI nicht behebt.
Beschreiben globaler sekundären Indizes in einer Tabelle
Um den Status aller globalen sekundären Indizes in einer Tabelle anzuzeigen, verwenden Sie die DescribeTable
-Operation. Der GlobalSecondaryIndexes
-Teil der Antwort zeigt alle Indizes der Tabelle, zusammen mit deren jeweiligem aktuellen Status ( IndexStatus
).
IndexStatus
für einen globalen sekundären Index ist einer der folgenden:
-
CREATING
– Der Index wird derzeit erstellt und ist noch nicht verfügbar. -
ACTIVE
— Der Index ist betriebsbereit und Anwendungen können in diesemQuery
-Operationen durchführen -
UPDATING
— Die Einstellungen des bereitgestellten Durchsatzes des Index werden geändert. -
DELETING
– Der Index wird derzeit gelöscht und kann nicht länger verwendet werden.
Wenn DynamoDB einen globalen sekundären Index fertiggestellt hat, ändert sich der Indexstatus von CREATING
in ACTIVE
.
Hinzufügen eines globalen sekundären Index zu einer vorhandenen Tabelle
Um einen globalen sekundären Index einer vorhandenen Tabelle hinzuzufügen, verwenden Sie die UpdateTable
-Operation mit dem Parameter GlobalSecondaryIndexUpdates
. Geben Sie die folgenden Informationen ein:
-
Ein Indexname. Der Name muss innerhalb der Indizes der Tabelle eindeutig sein.
-
Das Schlüsselschema des Index. Sie müssen ein Attribut für den Partitionsschlüssel des Index angeben. Sie können optional ein weiteres Attribut für den Sortierschlüssel des Index festlegen. Diese beiden Schlüsselattribute müssen nicht mit den Schlüsselattributen in der Tabelle übereinstimmen. Die Datentypen für jedes Schemaattribut müssen skalar sein:
String
,Number
oderBinary
. -
Die Attribute, die von der Tabelle in den Index projiziert werden:
-
KEYS_ONLY
— Jeder Eintrag im Index besteht nur aus dem Tabellenpartitionsschlüssel und Sortierschlüsselwerten, sowie den Indexschlüsselwerten. -
INCLUDE
— Zusätzlich zu den inKEYS_ONLY
beschriebenen Attributen, enthält der sekundäre Index andere Nicht-Schlüsselattribute, die Sie angeben. -
ALL
— Der Index enthält alle Attribute der Quelltabelle.
-
-
Die Einstellungen für den bereitgestellten Durchsatz für den Index bestehen aus
ReadCapacityUnits
undWriteCapacityUnits
. Diese Einstellungen für den bereitgestellten Durchsatz sind getrennt von denen der Tabelle.
Sie können nur einen globalen sekundären Index pro UpdateTable
-Operation verwenden.
Phasen der Index-Erstellung
Wenn Sie einen neuen globalen sekundären Index einer vorhandenen Tabelle hinzufügen, ist die Tabelle weiterhin verfügbar, während der Index erstellt wird. Jedoch ist der neue Index für Abfrageoperationen nicht verfügbar bis sein Status sich von CREATING
in ACTIVE
ändert.
Anmerkung
Bei der Erstellung des globalen sekundären Index wird Application Auto Scaling nicht verwendet. Wenn die MIN
-Kapazität für Application Auto Scaling erhöht wird, verkürzt sich die Erstellungszeit für den globalen sekundären Index nicht.
Im Hintergrund erstellt DynamoDB den Index in zwei Phasen:
- Ressourcenzuweisung
-
DynamoDB weist die erforderlichen Rechen- und Speicherressourcen zu, um den Index zu erstellen.
Während der Ressourcenzuordnungsphase ist das
IndexStatus
-AttributCREATING
und dasBackfilling
-Attribut ist False. Um den Status einer Tabelle und all ihre sekundären Indizes abzurufen, verwenden Sie dieDescribeTable
-Operation.Während sich der Index in der Ressourcenzuweisungsphase befindet, können Sie weder den Index noch seine übergeordnete Tabelle löschen. Sie können auch den bereitgestellten Durchsatz des Index oder der Tabelle nicht ändern. Sie in der Tabelle keine anderen Indizes hinzufügen oder löschen. Sie können jedoch den bereitgestellten Durchsatz dieser anderen Indizes ändern.
- Abgleichen
-
Für jedes Element in der Tabelle bestimmt DynamoDB, welche Reihe von Attributen auf Basis seiner Projektion (
KEYS_ONLY
,INCLUDE
, oderALL
) in den Index geschrieben werden. Es schreibt dann diese Attribute in den Index. Während der Abgleichphase verfolgt DynamoDB Elemente, die in der Tabelle hinzugefügt, gelöscht oder aktualisiert werden. Die Attribute dieser Elemente werden, soweit erforderlich, auch in dem Index hinzugefügt, gelöscht oder aktualisiert.Während der Abgleichphase ist das
IndexStatus
-Attribut aufCREATING
gesetzt und dasBackfilling
-Attribut ist True. Um den Status einer Tabelle und all ihrer es abzurufen, verwenden Sie dieDescribeTable
-Operation.Während der Index abgleicht, können Sie seine übergeordnete Tabelle nicht löschen. Sie können jedoch weiterhin den den Index löschen oder den bereitgestellten Durchsatz der Tabelle und dessen sekundäre Indizes ändern.
Anmerkung
Während der Abgleichphase können einige Schreibvorgänge regelwidriger Elemente erfolgreich sein, während andere abgelehnt werden. Nach dem Abgleich werden alle Schreibvorgänge für Elemente, die gegen das neue Schlüsselschema des Index verstoßen, abgelehnt. Wir empfehlen, dass Sie das Tool Violation Detector ausführen, nachdem die Abgleichphase abgeschlossen ist, um alle Schlüsselverstöße, die gegebenenfalls aufgetreten sind, zu erkennen und zu beheben. Weitere Informationen finden Sie unter Erkennen und Korrigieren von Verletzungen von Indexschlüsseln in DynamoDB.
Während der laufenden Ressourcenzuordnung und Abgleichphasen ist der Index im Status CREATING
. Während dieser Zeit führt DynamoDB Leseoperationen für die Tabelle durch. Lesevorgänge aus der Basistabelle zum Auffüllen des globalen sekundären Indexes werden Ihnen nicht in Rechnung gestellt. Schreibvorgänge zum Auffüllen des neu erstellten globalen sekundären Indexes werden Ihnen jedoch in Rechnung gestellt.
Sobald die Erstellung des Index abgeschlossen ist, ändert sich sein Status in ACTIVE
. Sie können den Index nicht Query
oder Scan
bis er ACTIVE
ist.
Anmerkung
In einigen Fällen kann DynamoDB aufgrund von Indexschlüsselverstößen keine Daten aus der Tabelle in den Index schreiben. Dies kann in folgenden Fällen passieren:
-
Der Datentyp eines Attributwerts stimmt nicht mit dem Datentyp eines Indexschlüssel-Schema-Datentyps überein.
-
Die Größe eines Attributs überschreitet die maximale Länge für ein Indexschlüsselattribut.
-
Ein Indexschlüsselattribut hat eine leere Zeichenfolge oder einen leeren Binärattributwert.
Indexschlüsselverstöße beeinträchtigen die Erstellung des globalen sekundären Indexes nicht. Wenn der Index jedoch ACTIVE
wird, sind die verstoßenden Schlüssel nicht im Index vorhanden.
DynamoDB bietet ein eigenständiges Tool für das Erkennen und Lösen dieser Probleme. Weitere Informationen finden Sie unter Erkennen und Korrigieren von Verletzungen von Indexschlüsseln in DynamoDB.
Hinzufügen eines globalen sekundären Index zu einer großen Tabelle
Die erforderliche Zeit für das Erstellen eines globalen sekundären Indizes hängt von mehreren Faktoren ab, z. B.:
-
Die Tabellengröße
-
Die Anzahl der Elemente in der Tabelle, die sich für eine Aufnahme in den Index eignen
-
Die Reihe von Attributen, die in den Index projiziert werden
-
Der bereitgestellte Schreibkapazität des Indexes
-
Schreibaktivität der Haupttabelle, während der Index erstellt wird
Wenn Sie einen globalen sekundären Index einer sehr große Tabelle hinzufügen, kann es sehr lang dauern, bis der Erstellungsvorgang abgeschlossen ist. Um den Fortschritt zu überwachen und festzustellen, ob der Index über ausreichende Schreibkapazität verfügt, ziehen Sie die folgenden CloudWatch Amazon-Metriken zu Rate:
-
OnlineIndexPercentageProgress
-
OnlineIndexConsumedWriteCapacity
-
OnlineIndexThrottleEvents
Weitere Informationen zu CloudWatch Metriken im Zusammenhang mit DynamoDB finden Sie unter. DynamoDB-Metriken
Wichtig
Möglicherweise müssen Sie sehr große Tabellen zulassen, bevor Sie einen globalen sekundären Index erstellen oder aktualisieren können. Bitte wenden Sie sich an den AWS Support, um Ihre Tische auf die Zulassungsliste zu setzen.
Wenn die Einstellung des bereitgestellten Schreibdurchsatzes des Index zu niedrig ist, wird die Indexerstellung länger dauern. Um einen neuen globalen sekundären Index schneller zu erstellen, können Sie seine bereitgestellte Schreibkapazität vorübergehend erhöhen.
Anmerkung
In der Regel empfehlen wir, die bereitgestellte Schreibkapazität des Index auf das 1,5-fache der Schreibkapazität der Tabelle festzulegen. Dies ist eine gute Einstellung für viele Anwendungsfälle. Ihre tatsächlichen Anforderungen können jedoch höher oder niedriger sein.
Während ein Index abgeglichen wird, verwendet DynamoDB interne Systemkapazität um aus der Tabelle zu lesen. Dies soll die Auswirkung der Indexerstellung minimieren und vermeiden, dass der Tabelle nicht genügend Schreibkapazität zur Verfügung steht.
Es ist jedoch möglich, dass das Volumen der eingehenden Schreibaktivität die bereitgestellte Schreibkapazität des Index überschreitet. Dies ist ein Engpassszenario, in dem die Indexerstellung länger dauert, weil die Schreibaktivität an den Index gedrosselt ist. Wir empfehlen Ihnen, während der Indexerstellung die CloudWatch Amazon-Metriken für den Index zu überwachen, um festzustellen, ob die verbrauchte Schreibkapazität die bereitgestellte Kapazität übersteigt. In einem Engpassszenario sollten Sie die bereitgestellte Schreibkapazität des Indexes erhöhen, um eine Schreibeinschränkung während der Abgleichphase zu verhindern.
Nachdem der Index erstellt wurde, sollten Sie seine bereitgestellte Schreibkapazität in Bezug auf die normale Nutzung Ihrer Anwendung festlegen.
Löschen eines globalen sekundären Index
Wenn Sie keinen globalen sekundären Index mehr benötigen, können Sie ihn mithilfe von UpdateTable
verwenden.
Sie können nur einen globalen sekundären Index pro UpdateTable
verwenden.
Während der globale sekundäre Index gelöscht wird, hat dies keine Auswirkung auf jegliche Lese- oder Schreibaktivität in der übergeordneten Tabelle. Während die Löschung ausgeführt wird, können Sie weiterhin den bereitgestellten Durchsatz anderer Indizes ändern
Anmerkung
-
Beim Löschen einer Tabelle mithilfe der
DeleteTable
-Aktion, werden alle es in dieser Tabelle ebenfalls gelöscht. -
Die Löschung des globalen sekundären Index wird Ihrem Konto nicht berechnet.
Ändern eines globalen sekundären Indexes während der Erstellung
Während ein Index erstellt wird, können Sie die DescribeTable
-Operation verwenden, um zu bestimmen, in welcher Phase er sich befindet. Die Beschreibung für den Index enthält ein Boolesches Attribut, Backfilling
, um anzugeben, ob DynamoDB derzeit den Index mit Elementen aus der Tabelle lädt. Wenn Backfilling
True ist, dann ist die Phase der Ressourcenzuordnung abgeschlossen und der Index ist dabei, abzugleichen.
Während des Abgleichens können Sie die Parameter des bereitgestellten Durchsatzes für den Index aktualisieren. Sie könnten dies tun, um die Indexerstellung zu beschleunigen: Sie können die Schreibkapazität für den Index während seiner Erstellung erhöhen und sie danach wieder verringern. Ändern Sie die Einstellungen des bereitgestellten Durchsatzes des Index, indem Sie die UpdateTable
-Operation verwenden. Der Indexstatus ändert sich in UPDATING
und Backfilling
ist True bis der Index betriebsbereit ist.
Während des Abgleichens können Sie den erstellten Index löschen. Während der Phase können Sie in der Tabelle keine anderen Indizes hinzufügen oder löschen.
Anmerkung
Bei Indizes, die als Teil einer CreateTable
-Operation erstellt wurden, wird das Backfilling
-Attribut in der DescribeTable
-Ausgabe nicht angezeigt. Weitere Informationen finden Sie unter Phasen der Index-Erstellung.