Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用本地二级索引:.NET

您可以使用适用于 .NET 的 AWS 开发工具包低级 API 创建带一个或多个local secondary index的表、描述表中的索引,以及使用索引执行查询。这些操作会映射到对应的低级 DynamoDB API 操作。有关更多信息,请参阅 .NET 代码示例

以下是使用 .NET 低级 API 执行表操作的常见步骤。

  1. 创建 AmazonDynamoDBClient 类的实例。

  2. 通过创建对应的请求数据元,为操作提供必需参数和可选参数。

    例如,创建一个 CreateTableRequest 数据元以创建表;创建一个 QueryRequest 数据元以查询表或索引。

  3. 执行您在前面步骤中创建的客户端提供的适当方法。

创建含有本地二级索引的表

必须在创建表的同时创建本地二级索引。为此,请使用 CreateTable 并提供一个或多个local secondary index的规格。以下 C# 代码段创建一个包含音乐精选中歌曲信息的表。分区键为 Artist,排序键为 SongTitleAlbumTitleIndex 这一二级索引可以按专辑名称进行查询。

以下是使用适用于 .NET 低级 API 创建具有local secondary index的表的步骤。

  1. 创建 AmazonDynamoDBClient 类的实例。

  2. 创建 CreateTableRequest 类实例,以提供请求信息。

    您必须提供表名称、主键以及预置吞吐量值。对于local secondary index,您必须提供索引名称、索引排序键的名称和数据类型、索引的键架构以及属性投影。

  3. 以参数形式提供请求数据元,以执行 CreateTable 方法。

以下 C# 代码段执行的就是上述步骤。该代码段创建一个表 (Music),该表包含针对 AlbumTitle 属性的二级索引。投影到索引的属性只有表的分区键、排序键以及索引排序键。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "Music"; CreateTableRequest createTableRequest = new CreateTableRequest() { TableName = tableName }; //ProvisionedThroughput createTableRequest.ProvisionedThroughput = new ProvisionedThroughput() { ReadCapacityUnits = (long)5, WriteCapacityUnits = (long)5 }; //AttributeDefinitions List<AttributeDefinition> attributeDefinitions = new List<AttributeDefinition>(); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "Artist", AttributeType = "S" }); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "SongTitle", AttributeType = "S" }); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "AlbumTitle", AttributeType = "S" }); createTableRequest.AttributeDefinitions = attributeDefinitions; //KeySchema List<KeySchemaElement> tableKeySchema = new List<KeySchemaElement>(); tableKeySchema.Add(new KeySchemaElement() { AttributeName = "Artist", KeyType = "HASH" }); //Partition key tableKeySchema.Add(new KeySchemaElement() { AttributeName = "SongTitle", KeyType = "RANGE" }); //Sort key createTableRequest.KeySchema = tableKeySchema; List<KeySchemaElement> indexKeySchema = new List<KeySchemaElement>(); indexKeySchema.Add(new KeySchemaElement() { AttributeName = "Artist", KeyType = "HASH" }); //Partition key indexKeySchema.Add(new KeySchemaElement() { AttributeName = "AlbumTitle", KeyType = "RANGE" }); //Sort key Projection projection = new Projection() { ProjectionType = "INCLUDE" }; List<string> nonKeyAttributes = new List<string>(); nonKeyAttributes.Add("Genre"); nonKeyAttributes.Add("Year"); projection.NonKeyAttributes = nonKeyAttributes; LocalSecondaryIndex localSecondaryIndex = new LocalSecondaryIndex() { IndexName = "AlbumTitleIndex", KeySchema = indexKeySchema, Projection = projection }; List<LocalSecondaryIndex> localSecondaryIndexes = new List<LocalSecondaryIndex>(); localSecondaryIndexes.Add(localSecondaryIndex); createTableRequest.LocalSecondaryIndexes = localSecondaryIndexes; CreateTableResponse result = client.CreateTable(createTableRequest); Console.WriteLine(result.CreateTableResult.TableDescription.TableName); Console.WriteLine(result.CreateTableResult.TableDescription.TableStatus);

您必须等待 DynamoDB 创建该表并将表的状态设置为 ACTIVE。然后,您就可以开始在表中添加数据元项目。

描述含有本地二级索引的表

要获取有关表中的local secondary index的信息,请使用 DescribeTable API。对于每个索引,您都可以查看其名称、键架构和投影的属性。

以下介绍使用 .NET 低级 API 访问表中的local secondary index信息的步骤。

  1. 创建 AmazonDynamoDBClient 类的实例。

  2. 创建 DescribeTableRequest 类实例,以提供请求信息。您必须提供表名称。

  3. 以参数形式提供请求数据元,以执行 describeTable 方法。

以下 C# 代码段执行的就是上述步骤。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "Music"; DescribeTableResponse response = client.DescribeTable(new DescribeTableRequest() { TableName = tableName }); List<LocalSecondaryIndexDescription> localSecondaryIndexes = response.DescribeTableResult.Table.LocalSecondaryIndexes; // This code snippet will work for multiple indexes, even though // there is only one index in this example. foreach (LocalSecondaryIndexDescription lsiDescription in localSecondaryIndexes) { Console.WriteLine("Info for index " + lsiDescription.IndexName + ":"); foreach (KeySchemaElement kse in lsiDescription.KeySchema) { Console.WriteLine("\t" + kse.AttributeName + ": key type is " + kse.KeyType); } Projection projection = lsiDescription.Projection; Console.WriteLine("\tThe projection type is: " + projection.ProjectionType); if (projection.ProjectionType.ToString().Equals("INCLUDE")) { Console.WriteLine("\t\tThe non-key projected attributes are:"); foreach (String s in projection.NonKeyAttributes) { Console.WriteLine("\t\t" + s); } } }

查询本地二级索引

您可以在local secondary index中使用 Query(基本与对表执行 Query 操作一样)。您需要指定索引名称、索引排序键的查询条件以及要返回的属性。在本示例中,索引为 AlbumTitleIndex,索引排序键为 AlbumTitle。

要返回的只包含投影到索引的属性。您也可以修改此查询,让返回结果中也包含非键属性,但是这样会导致表抓取活动的成本相对较高的。有关表抓取的更多信息,请参阅属性投影

以下是使用 .NET 低级 API 查询local secondary index的步骤。

  1. 创建 AmazonDynamoDBClient 类的实例。

  2. 创建 QueryRequest 类实例,以提供请求信息。

  3. 以参数形式提供请求数据元,以执行 query 方法。

以下 C# 代码段执行的就是上述步骤。

QueryRequest queryRequest = new QueryRequest { TableName = "Music", IndexName = "AlbumTitleIndex", Select = "ALL_ATTRIBUTES", ScanIndexForward = true, KeyConditionExpression = "Artist = :v_artist and AlbumTitle = :v_title", ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":v_artist",new AttributeValue {S = "Acme Band"}}, {":v_title",new AttributeValue {S = "Songs About Life"}} }, }; QueryResponse response = client.Query(queryRequest); foreach (var attribs in response.Items) { foreach (var attrib in attribs) { Console.WriteLine(attrib.Key + " ---> " + attrib.Value.S); } Console.WriteLine(); }