在 .NET 中使用 DynamoDB 表 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 .NET 中使用 DynamoDB 表

您可以使用 Amazon SDK for .NET 创建、更新和删除表,以及列出您账户中所有的表或者获取有关某个特定表的信息。

下面是使用 Amazon SDK for .NET 执行 Amazon DynamoDB 表操作的常见步骤。

  1. 创建 AmazonDynamoDBClient 类(客户端)的实例。

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

    例如,通过创建 CreateTableRequest 数据元来创建表,以及创建 UpdateTableRequest 数据元来更新现有表。

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

注意

本节中的示例不适用于 .NET Core,因为它不支持同步方法。有关更多信息,请参阅适用于 .NET 的 Amazon 异步 API

创建表

要创建表,您必须提供表名称、表的主键以及预置的吞吐量值。

使用 Amazon SDK for .NET 低级别 API 创建表
  1. 创建 AmazonDynamoDBClient 类的实例。

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

    您必须提供表名称、主键以及预置的吞吐量值。

  3. 以参数形式提供请求对象,运行 AmazonDynamoDBClient.CreateTable 方法。

以下 C# 示例演示了上述步骤。该示例会创建一个表 (ProductCatalog),这个表将 Id 用作主键并使用预配置的一组吞吐量值。您可以根据应用程序要求,使用 UpdateTable API 更新预置的吞吐量值。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new CreateTableRequest { TableName = tableName, AttributeDefinitions = new List<AttributeDefinition>() { new AttributeDefinition { AttributeName = "Id", AttributeType = "N" } }, KeySchema = new List<KeySchemaElement>() { new KeySchemaElement { AttributeName = "Id", KeyType = "HASH" //Partition key } }, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = 10, WriteCapacityUnits = 5 } }; var response = client.CreateTable(request);

您必须等待 DynamoDB 创建该表并将其状态设置为 ACTIVE。该 CreateTable 响应中包含 TableDescription 属性,从而提供必要的表信息。

var result = response.CreateTableResult; var tableDescription = result.TableDescription; Console.WriteLine("{1}: {0} \t ReadCapacityUnits: {2} \t WriteCapacityUnits: {3}", tableDescription.TableStatus, tableDescription.TableName, tableDescription.ProvisionedThroughput.ReadCapacityUnits, tableDescription.ProvisionedThroughput.WriteCapacityUnits); string status = tableDescription.TableStatus; Console.WriteLine(tableName + " - " + status);

您也可以调用客户端的 DescribeTable 方法,随时获得表信息。

var res = client.DescribeTable(new DescribeTableRequest{TableName = "ProductCatalog"});

更新表

您可以仅更新现有表的预置吞吐量值。您可能需要根据应用程序的要求更新这些值。

注意

您可以根据需要随时提高吞吐容量,以及使它减小到特定约束内。有关每天的吞吐量增加和减少的更多信息,请参阅 Amazon DynamoDB 中的服务、账户和表限额

使用 Amazon SDK for .NET 低级别 API 更新表
  1. 创建 AmazonDynamoDBClient 类的实例。

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

    您必须提供表名称和新的预置吞吐量值。

  3. 以参数形式提供请求对象,运行 AmazonDynamoDBClient.UpdateTable 方法。

以下 C# 示例演示了上述步骤。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ExampleTable"; var request = new UpdateTableRequest() { TableName = tableName, ProvisionedThroughput = new ProvisionedThroughput() { // Provide new values. ReadCapacityUnits = 20, WriteCapacityUnits = 10 } }; var response = client.UpdateTable(request);

删除表

按照以下步骤使用 .NET 低级 API 删除表。

使用Amazon SDK for .NET低级别 API 删除表
  1. 创建 AmazonDynamoDBClient 类的实例。

  2. 创建一个 DeleteTableRequest 类的实例,并提供您想要删除的表的名称。

  3. 以参数形式提供请求对象,运行 AmazonDynamoDBClient.DeleteTable 方法。

以下 C# 代码示例演示了上述步骤。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ExampleTable"; var request = new DeleteTableRequest{ TableName = tableName }; var response = client.DeleteTable(request);

列出表

要使用 Amazon SDK for .NET 低级 API 列出您账户中的表,请创建一个 AmazonDynamoDBClient 实例,并执行 ListTables 方法。

ListTables 操作无需使用参数。但是,您可以指定可选参数。例如,如果您想要通过分页限制每页中表名称的数量,可以设置 Limit 参数。这需要您创建 ListTablesRequest 对象并提供一些可选参数,如以下 C# 示例所示。在设置页面大小的同时,该请求还设置了 ExclusiveStartTableName 参数。ExclusiveStartTableName 初始为 null。但是,在提取第一页结果之后,您必须将该参数的值设置为当前结果的 LastEvaluatedTableName 属性才能检索下一页。

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); // Initial value for the first page of table names. string lastEvaluatedTableName = null; do { // Create a request object to specify optional parameters. var request = new ListTablesRequest { Limit = 10, // Page size. ExclusiveStartTableName = lastEvaluatedTableName }; var response = client.ListTables(request); ListTablesResult result = response.ListTablesResult; foreach (string name in result.TableNames) Console.WriteLine(name); lastEvaluatedTableName = result.LastEvaluatedTableName; } while (lastEvaluatedTableName != null);