Verbessern des Datenzugriffs mit sekundären Indizes - Amazon-DynamoDB

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.

Verbessern des Datenzugriffs mit sekundären Indizes

Amazon DynamoDB bietet einen schnellen Zugriff auf Elemente in einer Tabelle durch Angeben von Primärschlüsselwerten. Viele Anwendungen können jedoch davon profitieren, wenn ein oder mehrere Sekundärschlüssel (oder alternative Schlüssel) verfügbar sind, um effizienten Zugriff auf Daten mit anderen Attributen als dem Primärschlüssel zu erlauben. Dazu können Sie einen oder mehrere sekundäre Indizes für eine Tabelle erstellen und Query- oder Scan-Anforderungen für diese Indizes ausgeben.

Ein sekundärer Index ist eine Datenstruktur, die eine Teilmenge der Attribute aus einer Tabelle zusammen mit einem alternativen Schlüssel zur Unterstützung von Query-Operationen enthält. Sie können Daten aus dem Index mit einer Query-Operation ähnlich wie Query für eine Tabelle abrufen. Eine Tabelle kann mehrere sekundäre Indizes enthalten, die Ihren Anwendungen Zugriff auf viele verschiedene Abfragemuster bieten.

Anmerkung

Sie können außerdem eine Scan-Operation für einen Index ähnlich wie Scan für eine Tabelle ausführen.

Jeder sekundäre Index ist genau einer Tabelle zugeordnet, von der er seine Daten erhält. Diese Tabelle wird als Basistabelle für den Index bezeichnet. Beim Erstellen eines Indexes definieren Sie einen alternativen Schlüssel für den Index (Partitionsschlüssel und Sortierschlüssel). Außerdem definieren Sie die Attribute, die von der Basistabelle in den Index projiziert oder kopiert werden sollen. DynamoDB kopiert diese Attribute in den Index zusammen mit den Primärschlüsselattributen für die Basistabelle. Sie können den Index dann genauso abfragen oder scannen wie eine Tabelle.

Jeder sekundäre Index wird von DynamoDB verwaltet. Wenn Sie der Basistabelle Elemente hinzufügen, ändern oder löschen, werden alle Indizes dieser Tabelle ebenfalls aktualisiert, um diese Änderungen zu berücksichtigen.

DynamoDB unterstützt zwei Arten sekundärer Indizes:

  • Globaler sekundärer Index – Dieser Index verfügt über einen Partitionsschlüssel und einen Sortierschlüssel, die nicht mit denen der Basistabelle übereinstimmen müssen. Ein globaler sekundärer Index wird als „global“ betrachtet, da Indexabfragen partitionsübergreifend alle Daten in der Basistabelle umfassen können. Ein globaler sekundärer Index wird in einem eigenen Partitionsbereich abseits der Basistabelle gespeichert und von der Basistabelle getrennt skaliert.

  • Lokaler sekundärer Index  – Dieser Index weist denselben Partitionsschlüssel wie die Basistabelle auf, hat aber einen anderen Sortierschlüssel. Ein lokaler sekundärer Index wird als „lokal“ betrachtet, da jede Partition eines lokalen sekundären Index auf die Basistabellenpartition bezogen ist, die denselben Partitionsschlüsselwert besitzt.

Einen Vergleich der globalen Sekundärindizes und der lokalen Sekundärindizes finden Sie in diesem Video.

Berücksichtigen Sie die Anforderungen Ihrer Anwendung, wenn Sie sich für einen Indextyp entscheiden. In der folgenden Tabelle werden die Hauptunterschiede zwischen einem globalen sekundären Index und einem lokalen sekundären Index dargelegt.

Merkmal Globaler sekundärer Index Lokaler sekundärer Index
Schlüsselschema Der Primärschlüssel eines globalen sekundärer Indizes kann entweder einfach (Partitionsschlüssel) oder zusammengesetzt sein (Partitions- und Sortierschlüssel). Der Primärschlüssel eines lokalen sekundären Indizes muss zusammengesetzt sein (Partitions- und Sortierschlüssel).
Schlüsselattribute Der Indexpartitions- und Sortierschlüssel (sofern vorhanden) kann ein beliebiges Basistabellenattribut vom Typ Zeichenfolge, Zahl oder Binärwert sein. Der Partitionsschlüssel des Indexes ist dasselbe Attribut wie der Partitionsschlüssel der Basistabelle. Der Sortierschlüssel kann ein beliebiges Basistabellenattribut vom Typ Zeichenfolge, Zahl oder Binärwert sein.
Größenbeschränkungen pro Partitionsschlüsselwert Für globale sekundäre Indizes gibt es keine Größenbeschränkungen. Für jeden Partitionsschlüsselwert darf die Gesamtgröße aller indizierten Elemente höchstens 10 GB betragen.
Online-Indizierungsoperationen Globale sekundäre Indizes können gleichzeitig mit der Tabelle erstellt werden. Sie können einer vorhandenen Tabelle auch einen neuen globalen sekundären Index hinzufügen oder einen vorhandenen globalen sekundären Index löschen. Weitere Informationen finden Sie unter Verwalten globaler sekundärer Indizes. Globale sekundäre Indizes werden zur selben Zeit wie die Tabelle erstellt. Sie können einer vorhandenen Tabelle keinen lokalen sekundären Index hinzufügen oder vorhandene lokale sekundäre Indizes löschen.
Abfragen und Partitionen Mit einem globalen sekundären Index können Sie die gesamte Tabelle partitionsübergreifend abfragen. Ein lokaler sekundärer Index ermöglicht das Abfragen über eine einzelne Partition, wie vom Partitionsschlüsselwert in der Abfrage angegeben.
Lesekonsistenz Abfragen zu globalen sekundären Indizes unterstützen nur Eventual Consistency. Wenn Sie einen lokalen sekundären Index abfragen, können Sie entweder Eventually Consistent oder Strongly Consistent auswählen.
Verbrauch der bereitgestellten Durchsatzkapazität Jeder globaler sekundärer Index verfügt über eigene Einstellungen für den bereitgestellten Durchsatz für Lese- und Schreibaktivitäten. Abfragen oder Scans für einen globalen sekundären Index verbrauchen Kapazitätseinheiten des Indexes und nicht der Basistabelle. Dasselbe gilt für globale sekundäre Index-Aktualisierungen aufgrund von Tabellenschreibvorgängen. Ein globaler sekundärer Index, der globalen Tabellen zugeordnet ist, verbraucht Schreibkapazitätseinheiten. Abfragen oder Scans für einen lokalen sekundären Index verbrauchen Lesekapazitätseinheiten der Basistabelle. Wenn Sie Daten in eine Tabelle schreiben, werden die zugehörigen lokalen sekundären Indizes ebenfalls aktualisiert. Diese Aktualisierungen verbrauchen Schreibkapazitätseinheiten aus der Basistabelle. Ein lokaler sekundärer Index, der globalen Tabellen zugeordnet ist, verbraucht replizierte Schreibkapazitätseinheiten.
Projizierte Attribute Mit globalen sekundären Index-Abfragen oder -Scans können Sie nur die Attribute anfordern, die in den Index projiziert sind. DynamoDB ruft keine Attribute aus der Tabelle ab. Wenn Sie einen lokalen sekundären Index abfragen oder scannen können Sie Attribute anfordern, die nicht in den Index projiziert sind. DynamoDB ruft diese Attribute automatisch aus der Tabelle ab.

Wenn Sie mehr als eine Tabelle mit sekundären Indizes erstellen möchten, müssen Sie diesen Vorgang sequenziell ausführen. Beispielsweise erstellen Sie die erste Tabelle und warten, bis sie ACTIVE wird. Dann erstellen Sie die nächste Tabelle und warten bis sie ACTIVE wird und so weiter. Wenn Sie versuchen, gleichzeitig mehr als eine Tabelle mit einem sekundären Index zu erstellen, gibt DynamoDB eine LimitExceededException zurück.

Jeder sekundäre Index verwendet dieselbe Tabellenklasse und denselben Kapazitätsmodus wie die Basistabelle, der er zugeordnet ist. Geben Sie für jeden sekundären Index Folgendes an:

  • Der Typ des zu erstellenden Indexes – entweder ein globaler sekundärer Index oder ein lokaler sekundärer Index.

  • Einen Namen für den Index. Die Namenskonventionen für Indizes sind mit den Konventionen für Tabellen identisch, wie in Service-, Konto- und Tabellenkontingente in Amazon DynamoDB aufgelistet. Der Name muss für die Basistabelle, der er zugeordnet ist, eindeutig sein. Sie können allerdings denselben Namen für Indizes verwenden, die verschiedenen Basistabellen zugeordnet sind.

  • Das Schlüsselschema für den Index. Jedes Attribut im Indexschlüsselschema muss ein Attribut auf oberster Ebene vom Typ String, Number oder Binary sein. Andere Datentypen, einschließlich Dokumenten und Sätzen, sind nicht zulässig. Andere Anforderungen für das Schlüsselschema hängen vom Indextyp ab:

    • Für einen globalen sekundären Index kann der Partitionsschlüssel ein beliebiges skalares Attribut der Basistabelle sein. Ein Sortierschlüssel ist optional und kann ebenfalls ein beliebiges skalares Attribut der Basistabelle sein.

    • Für einen lokalen sekundären Index muss der Partitionsschlüssel mit dem Partitionsschlüssel der Basistabelle übereinstimmen und der Sortierschlüssel muss ein Nicht-Schlüssel-Basistabellenattribut sein.

  • Zusätzliche Attribute, sofern vorhanden, werden von der Basistabelle in den Index projiziert. Diese Attribute ergänzen die Schlüsselattribute der Tabelle, die automatisch in jeden Index projiziert werden. Sie können Attribute jedes Datentyps, einschließlich Skalaren, Dokumenten und Sätzen, projizieren.

  • Die Einstellungen des für den Index bereitgestellten Durchsatzes, falls erforderlich:

    • Für einen globalen sekundären Index müssen Sie Einstellungen für Lese- und Schreibkapazitätseinheiten angeben. Diese Einstellungen für den bereitgestellten Durchsatz sind von den Einstellungen der Basistabelle unabhängig.

    • Für einen lokalen sekundären Index müssen Sie keine Einstellungen für Lese- und Schreibkapazitätseinheiten angeben. Alle Lese- und Schreibvorgänge für einen lokalen sekundären Index nutzen die Einstellungen des bereitgestellten Durchsatzes der entsprechenden Basistabelle.

Für maximale Abfrageflexibilität können Sie bis zu 20 globale sekundäre Indizes (Standardkontingent) und bis zu 5 lokale sekundäre Indizes pro Tabelle erstellen.

Das Kontingent für globale sekundäre Indizes liegt für die folgenden AWS -Regionen bei fünf:

  • AWS GovCloud (US-Ost)

  • AWS GovCloud (US-West)

  • Europa (Stockholm)

Um eine detaillierte Liste der sekundären Indizes in einer Tabelle abzurufen, verwenden Sie die DescribeTable-Operation. DescribeTable gibt den Namen, die Speichergröße und die Elementanzahl für jeden sekundären Index in der Tabelle zurück. Diese Werte werden nicht in Echtzeit, sondern etwa alle sechs Stunden aktualisiert.

Sie können auf die Daten in einem sekundären Index entweder mit der Query- oder der Scan-Operation zugreifen. Sie müssen den Namen der Basistabelle und den Namen des Indexes, den Sie verwenden möchten, die Attribute, die in den Abfrageergebnissen zurückgegeben werden sollen, und etwaige Bedingungsausdrücke oder Filter, die Sie anwenden möchten, angeben. DynamoDB kann Ergebnisse in auf- oder absteigender Reihenfolge liefern.

Beim Löschen einer Tabelle werden alle dieser Tabelle zugeordneten Indizes ebenfalls gelöscht.

Bewährte Methoden finden Sie unter Bewährte Methoden für die Verwendung sekundärer Indexe in DynamoDB.