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.
Unterschiede zwischen einer relationalen (SQL) Datenbank und DynamoDB bei der Verwaltung von Indizes
Indexe ermöglichen Ihnen den Zugriff auf alternative Abfragemuster und können Abfragen beschleunigen. In diesem Abschnitt werden die Erstellung und Verwendung von Indizes in Amazon DynamoDB verglichen SQL und gegenübergestellt.
Ganz gleich, ob Sie eine relationale Datenbank oder DynamoDB verwenden, sollten Sie bei der Indexerstellung mit Bedacht vorgehen. Bei jedem Schreibvorgang in einer Tabelle müssen alle Indexe der Tabelle aktualisiert werden. In einer Umgebung mit vielen Schreibvorgängen und großen Tabellen können dadurch große Mengen von Systemressourcen belegt werden. In schreibgeschützten Umgebungen (bzw. Umgebungen, indenen Daten vor allem gelesen werden) stellt dies kein Problem dar. Sie sollten jedoch sicherstellen, dass die Indexe tatsächlich von der Anwendung verwendet werden und nicht nur Speicherplatz belegen.
Themen
Unterschiede zwischen einer relationalen (SQL) Datenbank und DynamoDB beim Erstellen eines Indexes
Vergleichen Sie die CREATE INDEX
Aussage SQL mit der UpdateTable
Operation in Amazon DynamoDB.
Einen Index erstellen mit SQL
In einer relationalen Datenbank ist ein Index eine Datenstruktur, mit der Sie schnelle Abfragen für verschiedene Spalten einer Tabelle ausführen können. Sie können die CREATE
INDEX
SQL Anweisung verwenden, um einer vorhandenen Tabelle einen Index hinzuzufügen und dabei die zu indizierenden Spalten anzugeben. Nachdem der Index erstellt wurde, können Sie die Daten in der Tabelle wie üblich abfragen. Die Datenbank kann die angegebenen Zeilen in der Tabelle anhand des Index schnell finden, sodass nicht die gesamte Tabelle gescannt werden muss.
Nachdem Sie einen Index erstellt haben, wird dieser von der Datenbank gepflegt. Sobald Sie Daten in der Tabelle ändern, wird der Index automatisch den Änderungen in der Tabelle entsprechend angepasst.
In My SQL würden Sie einen Index wie den folgenden erstellen.
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
Erstellen eines Index in DynamoDB
In DynamoDB können Sie einen sekundären Index für ähnliche Zwecke erstellen und verwenden.
Indexe in DynamoDB unterscheiden sich von ihren relationalen Gegenstücken. Wenn Sie einen sekundären Index erstellen, müssen Sie dessen Schlüsselattribute angeben – einen Partitionsschlüssel und einen Sortierschlüssel. Nachdem Sie den sekundären Index erstellt haben, können Sie Query
oder Scan
wie bei einer Tabelle erstellen. DynamoDB bietet keinen Abfrageoptimierer, sodass ein sekundärer Index nur bei der Query
- oder Scan
-Aktion verwendet wird.
DynamoDB unterstützt zwei verschiedene Arten von Indexen:
-
Globale sekundäre Indexe – Der Primärschlüssel des Index kann aus zwei beliebigen Attributen der Tabelle bestehen.
-
Lokale sekundäre Indexe – Der Partitionsschlüssel des Index muss mit dem Partitionsschlüssel der Tabelle übereinstimmen. Der Sortierschlüssel kann ein beliebiges, anderes Attribut sein.
DynamoDB stellt sicher, dass die Daten in einem sekundären Index schließlich mit seiner Tabelle konsistent sind. Sie können stark konsistente Query
- oder Scan
-Aktionen für eine Tabelle oder einen lokalen sekundären Index anfordern. Globale sekundäre Indexe unterstützen jedoch nur die letztendliche Datenkonsistenz.
Sie können einer vorhandenen Tabelle einen globalen sekundären Index hinzufügen, indem Sie die UpdateTable
-Aktion verwenden und GlobalSecondaryIndexUpdates
angeben.
{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }
Sie müssen die folgenden Parameter für UpdateTable
angeben:
-
TableName
– Die Tabelle, mit der der Index verknüpft wird. -
AttributeDefinitions
– Die Datentypen für die Schlüsselschemaattribute des Index. -
GlobalSecondaryIndexUpdates
– Details zu dem Index, den Sie erstellen möchten:-
IndexName
– Ein Name für den Index. -
KeySchema
– Die Attribute, die für den Indexprimärschlüssel verwendet werden. -
Projection
– Attribute aus der Tabelle, die in den Index kopiert werden. In diesem Fall bedeutetALL
, dass alle Attribute kopiert werden. -
ProvisionedThroughput (for provisioned tables)
– Die Anzahl der Lese- und Schreibvorgänge pro Sekunde, die Sie für diesen Index benötigen. (Dieser Wert steht nicht mit den Einstellungen für den bereitgestellten Durchsatz der Tabelle in Zusammenhang.)
-
Ein Teil dieser Operation umfasst das Abgleichen von Daten aus der Tabelle mit dem neuen Index. Während des Abgleichs ist die Tabelle weiterhin verfügbar. Der Index ist allerdings erst bereit, wenn sich das Attribut Backfilling
von TRUE in FALSE ändert. Sie können die Aktion DescribeTable
zum Anzeigen dieses Attributs verwenden.
Unterschiede zwischen einer relationalen (SQL) Datenbank und DynamoDB beim Abfragen und Scannen eines Indexes
Vergleichen Sie das Abfragen und Scannen eines Indexes mithilfe der SELECT Anweisung in SQL mit den Scan
Operationen Query
und in Amazon DynamoDB.
Abfragen und Scannen eines Indexes mit SQL
In einer relationalen Datenbank arbeiten Sie nicht direkt mit Indexen. Stattdessen fragen Sie Tabellen mithilfe von SELECT
-Anweisungen ab. Der Abfrageoptimierer kann jeden beliebigen Index nutzen.
Ein Abfrageoptimierer ist eine Komponente des relationalen Datenbankmanagementsystems (RDBMS), die die verfügbaren Indizes auswertet und bestimmt, ob sie zur Beschleunigung einer Abfrage verwendet werden können. Wenn die Indizes verwendet werden können, um eine Abfrage zu beschleunigen, RDBMS greift der zuerst auf den Index zu und verwendet ihn dann, um die Daten in der Tabelle zu finden.
Im Folgenden finden Sie einige SQL Aussagen, mit denen Sie die Leistung verbessern können GenreAndPriceIndex. Wir setzen voraus, dass die Tabelle Musik genügend Daten enthält, damit der Abfrageoptimierer diesen Index verwendet, statt die gesamte Tabelle einfach zu scannen.
/* All of the rock songs */ SELECT * FROM Music WHERE Genre = 'Rock';
/* All of the cheap country songs */ SELECT Artist, SongTitle, Price FROM Music WHERE Genre = 'Country' AND Price < 0.50;
Abfragen und Scannen eines Index in DynamoDB
In DynamoDB führen Sie Query
und Scan
-Operationen direkt für den Index aus, genauso wie für eine Tabelle. Sie können entweder DynamoDB API oder PartiQL (eine SQL -kompatible Abfragesprache) verwenden, um den Index abzufragen oder zu scannen. Sie müssen sowohl TableName
als auch IndexName
angeben.
Im Folgenden finden Sie einige Abfragen GenreAndPriceIndexin DynamoDB. (Das Schlüsselschema für diesen Index besteht aus Genre und Preis.)