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.
Arbeiten mit globalen sekundären Indizes: .NET
Sie können die AWS SDK for .NET-Low-Level-API verwenden, um eine Amazon-DynamoDB-Tabelle mit einem oder mehreren globalen sekundären Indizes zu erstellen, die Indizes in der Tabelle zu beschreiben und Abfragen mit den Indizes durchzuführen. Diese Operationen entsprechen den entsprechenden DynamoDB-Operationen. Weitere Informationen finden Sie in der Amazon-DynamoDB-API-Referenz.
Folgende sind die allgemeinen Schritte für Tabellenoperationen mithilfe der .NET-Low-Level-API.
-
Erstellen Sie eine Instance der
AmazonDynamoDBClient
-Klasse. -
Stellen Sie den erforderlichen und optionalen Parameter für die Operation bereit, indem Sie die entsprechenden Anforderungsobjekte erstellen.
Erstellen Sie beispielsweise ein
CreateTableRequest
-Objekt, um eine Tabelle zu erstellen und einQueryRequest
-Objekt, um eine Tabelle oder einen Index abzufragen. -
Rufen Sie die entsprechende Methode auf, die vom Client, den Sie im vorhergehenden Schritt erstellt haben, bereitgestellt wird.
Themen
Erstellen einer Tabelle mit einem globalen sekundären Index
Sie können globale sekundäre Indizes gleichzeitig mit der Tabelle erstellen. Zu diesem Zweck verwenden Sie CreateTable
und geben Ihre Spezifikationen für ein oder mehrere globale sekundäre Indizes an. Das folgende C#-Codebeispiel erstellt eine Tabelle, die Informationen über Wetterdaten enthält. Der Partitionsschlüssel ist Location
und der Sortierschlüssel Date
. Ein globaler sekundärer Index mit Namen PrecipIndex
ermöglicht einen schnellen Zugriff auf Niederschlagsdaten für verschiedene Standorte.
Im Folgenden werden die Schritte zum Erstellen einer Tabelle mit einem globalen sekundären Index mithilfe der .NET-Low-Level-API dargelegt.
-
Erstellen Sie eine Instance der
AmazonDynamoDBClient
-Klasse. -
Erstellen Sie eine Instance der
CreateTableRequest
-Klasse, um die Anforderungsinformationen bereitzustellen.Sie müssen den Tabellennamen, seinen zugehörigen Primärschlüssel und die Werte des bereitgestellten Durchsatzes angeben. Für den globalen sekundären Index müssen Sie den Indexnamen, seine Einstellungen des bereitgestellten Durchsatzes, die Attributdefinitionen für den Index, das Schlüsselschema für den Index und die Attributprojektion angeben.
-
Führen Sie die
CreateTable
-Methode aus, indem das Anforderungsobjekt als Parameter festgelegt wird.
Im folgenden C#-Codebeispiel werden die vorherigen Schritte veranschaulicht. Erstellt eine Tabelle (WeatherData
) mit einem globalen und lokalen sekundären Index (PrecipIndex
). Der Index-Partitionsschlüssel ist Date
und der Sortierschlüssel Precipitation
. Alle Tabellenattribute werden in den Index projiziert. Benutzer können diesen Index abfragen, um Wetterdaten für ein bestimmtes Datum abzurufen. Optional können diese nach Niederschlagsmenge sortiert werden.
Da es sich bei Precipitation
um kein Schlüsselattribut für die Tabelle handelt, ist es nicht erforderlich. WeatherData
-Elemente ohne Precipitation
erscheinen jedoch nicht in PrecipIndex
.
client = new AmazonDynamoDBClient(); string tableName = "WeatherData"; // Attribute definitions var attributeDefinitions = new List<AttributeDefinition>() { {new AttributeDefinition{ AttributeName = "Location", AttributeType = "S"}}, {new AttributeDefinition{ AttributeName = "Date", AttributeType = "S"}}, {new AttributeDefinition(){ AttributeName = "Precipitation", AttributeType = "N"} } }; // Table key schema var tableKeySchema = new List<KeySchemaElement>() { {new KeySchemaElement { AttributeName = "Location", KeyType = "HASH"}}, //Partition key {new KeySchemaElement { AttributeName = "Date", KeyType = "RANGE"} //Sort key } }; // PrecipIndex var precipIndex = new GlobalSecondaryIndex { IndexName = "PrecipIndex", ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = (long)10, WriteCapacityUnits = (long)1 }, Projection = new Projection { ProjectionType = "ALL" } }; var indexKeySchema = new List<KeySchemaElement> { {new KeySchemaElement { AttributeName = "Date", KeyType = "HASH"}}, //Partition key {new KeySchemaElement{AttributeName = "Precipitation",KeyType = "RANGE"}} //Sort key }; precipIndex.KeySchema = indexKeySchema; CreateTableRequest createTableRequest = new CreateTableRequest { TableName = tableName, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = (long)5, WriteCapacityUnits = (long)1 }, AttributeDefinitions = attributeDefinitions, KeySchema = tableKeySchema, GlobalSecondaryIndexes = { precipIndex } }; CreateTableResponse response = client.CreateTable(createTableRequest); Console.WriteLine(response.CreateTableResult.TableDescription.TableName); Console.WriteLine(response.CreateTableResult.TableDescription.TableStatus);
Sie müssen warten bis DynamoDB die Tabelle erstellt und den Tabellenstatus auf ACTIVE
setzt. Im Anschluss können Sie die Daten in der Tabelle ablegen.
Beschreiben einer Tabelle mit einem globalen sekundären Index
Um Informationen zu globalen sekundären Indizes in einer Tabelle zu erhalten, verwenden Sie DescribeTable
. Sie können auf den Namen, das Schlüsselschema und die projizierten Attribute von jedem Index zugreifen.
Im Folgenden werden die Schritte zum Zugriff auf globale sekundäre Index-Informationen in einer Tabelle mithilfe der .NET-Low-Level-API dargelegt.
-
Erstellen Sie eine Instance der
AmazonDynamoDBClient
-Klasse. -
Führen Sie die
describeTable
-Methode aus, indem das Anforderungsobjekt als Parameter festgelegt wird.Erstellen Sie eine Instance der
DescribeTableRequest
-Klasse, um die Anforderungsinformationen bereitzustellen. Sie müssen den Tabellennamen angeben.
Im folgenden C#-Codebeispiel werden die vorherigen Schritte veranschaulicht.
Beispiel
client = new AmazonDynamoDBClient(); string tableName = "WeatherData"; DescribeTableResponse response = client.DescribeTable(new DescribeTableRequest { TableName = tableName}); List<GlobalSecondaryIndexDescription> globalSecondaryIndexes = response.DescribeTableResult.Table.GlobalSecondaryIndexes; // This code snippet will work for multiple indexes, even though // there is only one index in this example. foreach (GlobalSecondaryIndexDescription gsiDescription in globalSecondaryIndexes) { Console.WriteLine("Info for index " + gsiDescription.IndexName + ":"); foreach (KeySchemaElement kse in gsiDescription.KeySchema) { Console.WriteLine("\t" + kse.AttributeName + ": key type is " + kse.KeyType); } Projection projection = gsiDescription.Projection; Console.WriteLine("\tThe projection type is: " + projection.ProjectionType); if (projection.ProjectionType.ToString().Equals("INCLUDE")) { Console.WriteLine("\t\tThe non-key projected attributes are: " + projection.NonKeyAttributes); } }
Abfragen eines globalen sekundären Indexes
Sie können Query
für einen globalen sekundären Index genauso nutzen, wie Sie Query
für eine Tabelle nutzen. Sie müssen den Indexnamen, die Abfragekriterien für den Indexpartitionsschlüssel und Sortierschlüssel (falls vorhanden) und die Attribute angeben, die Sie zurückgeben möchten. In diesem Beispiel ist der Index PrecipIndex
, der über den Partitionsschlüssel Date
und den Sortierschlüssel Precipitation
verfügt. Die Indexabfrage gibt alle Wetterdaten für ein bestimmtes Datum zurück, in denen der Niederschlag größer als Null ist.
Im Folgenden werden die Schritte zur Abfrage eines globalen sekundären Indizes mithilfe der .NET-Low-Level-API dargelegt.
-
Erstellen Sie eine Instance der
AmazonDynamoDBClient
-Klasse. -
Erstellen Sie eine Instance der
QueryRequest
-Klasse, um die Anforderungsinformationen bereitzustellen. -
Führen Sie die
query
-Methode aus, indem das Anforderungsobjekt als Parameter festgelegt wird.
Der Attributname Date
ist ein DynamoDB-reserviertes Wort. Daher müssen Sie einen Ausdrucksattributnamen als Platzhalter in dem KeyConditionExpression
verwenden.
Im folgenden C#-Codebeispiel werden die vorherigen Schritte veranschaulicht.
Beispiel
client = new AmazonDynamoDBClient(); QueryRequest queryRequest = new QueryRequest { TableName = "WeatherData", IndexName = "PrecipIndex", KeyConditionExpression = "#dt = :v_date and Precipitation > :v_precip", ExpressionAttributeNames = new Dictionary<String, String> { {"#dt", "Date"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { {":v_date", new AttributeValue { S = "2013-08-01" }}, {":v_precip", new AttributeValue { N = "0" }} }, ScanIndexForward = true }; var result = client.Query(queryRequest); var items = result.Items; foreach (var currentItem in items) { foreach (string attr in currentItem.Keys) { Console.Write(attr + "---> "); if (attr == "Precipitation") { Console.WriteLine(currentItem[attr].N); } else { Console.WriteLine(currentItem[attr].S); } } Console.WriteLine(); }