使用 Amazon DynamoDB NoSQL 数据库 - Amazon SDK for .NET
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Amazon DynamoDB NoSQL 数据库

注意

本主题中的信息特定于基于 .NET 框架和Amazon SDK for .NET版本 3.3 及更早版本。

这些区域有:Amazon SDK for .NET支持 Amazon DynamoDB,这是一项由提供的快速 NoSQL 数据库服务。Amazon. 开发工具包为与 DynamoDB 通信提供了三种编程模型:低级别模型,文档模型,以及对象持久性模型。

以下信息介绍了这些模型及其 API,提供有关使用方式和使用时机的示例,并向您提供中额外 DynamoDB 编程资源的链接。Amazon SDK for .NET.

低级模型

低级编程模型封装对 DynamoDB 服务的直接调用。您可以通过 Amazon.DynamoDBv2 命名空间访问此模型。

在三种模型中,低级模型需要编写的代码最多。例如,您必须将 .NET 数据类型转换为 DynamoDB 中的对等类型。但是,此模型向您提供了对大部分功能的访问。

以下示例显示如何使用低级模型创建表、修改表以及将项目插入到 DynamoDB 中的表。

创建表

在以下示例中,您可以使用 CreateTable 类的 AmazonDynamoDBClient 方法创建表。CreateTable 方法使用包含特性的 CreateTableRequest 类的实例,例如必需的项目属性名称、主键定义和吞吐容量。该 CreateTable 方法返回 CreateTableResponse 类的实例。

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); Console.WriteLine("Getting list of tables"); List<string> currentTables = client.ListTables().TableNames; Console.WriteLine("Number of tables: " + currentTables.Count); if (!currentTables.Contains("AnimalsInventory")) { var request = new CreateTableRequest { TableName = "AnimalsInventory", AttributeDefinitions = new List<AttributeDefinition> { new AttributeDefinition { AttributeName = "Id", // "S" = string, "N" = number, and so on. AttributeType = "N" }, new AttributeDefinition { AttributeName = "Type", AttributeType = "S" } }, KeySchema = new List<KeySchemaElement> { new KeySchemaElement { AttributeName = "Id", // "HASH" = hash key, "RANGE" = range key. KeyType = "HASH" }, new KeySchemaElement { AttributeName = "Type", KeyType = "RANGE" }, }, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = 10, WriteCapacityUnits = 5 }, }; var response = client.CreateTable(request); Console.WriteLine("Table created with request ID: " + response.ResponseMetadata.RequestId); }

验证该表已准备好修改

您必须先准备好表进行修改,然后才能更改或修改表。以下示例演示了如何使用低级模型验证 DynamoDB 中的表已准备就绪。在此示例中,通过 DescribeTable 类的 AmazonDynamoDBClient 方法引用要检查的目标表。该代码每五秒检查一次表的 TableStatus 属性的值。当状态设置为 ACTIVE 时,表已准备好供修改。

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var status = ""; do { // Wait 5 seconds before checking (again). System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5)); try { var response = client.DescribeTable(new DescribeTableRequest { TableName = "AnimalsInventory" }); Console.WriteLine("Table = {0}, Status = {1}", response.Table.TableName, response.Table.TableStatus); status = response.Table.TableStatus; } catch (ResourceNotFoundException) { // DescribeTable is eventually consistent. So you might // get resource not found. } } while (status != TableStatus.ACTIVE);

将项目插入到表中

在以下示例中,您使用低级模型将两个项目插入到 DynamoDB 中的表。每个项目通过 PutItem 类的 AmazonDynamoDBClient 方法插入,使用 PutItemRequest 类的实例。PutItemRequest 类的两个实例中的每个实例都接受将要插入项目的表名以及一系列项目属性值。

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request1 = new PutItemRequest { TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "1" }}, { "Type", new AttributeValue { S = "Dog" }}, { "Name", new AttributeValue { S = "Fido" }} } }; var request2 = new PutItemRequest { TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "2" }}, { "Type", new AttributeValue { S = "Cat" }}, { "Name", new AttributeValue { S = "Patches" }} } }; client.PutItem(request1); client.PutItem(request2);

文档模型

文档编程模型提供了一种更简单的方法来处理 DynamoDB 中的数据。此模型专门用于访问表和表中的项目。您可以通过 Amazon.DynamoDBv2.DocumentModel 命名空间访问此模型。

与低级编程模型相比,使用文档模型更容易针对 DynamoDB 数据编写代码。例如,您无需将相同数量的 .NET 数据类型转换为 DynamoDB 中的对等类型。不过,使用此模型所能访问的功能没有低级编程模型所提供的多。例如,您可以使用此模型创建、检索、更新和删除表中的项目。但是,要创建表,您必须使用低级模型。与对象持久化模型相比,此模型需要编写更多代码来存储、加载和查询 .NET 对象。

以下示例向您演示了在 DynamoDB 中如何使用文档模型插入项目和获取表中的项目。

将项目插入到表中

在以下示例中,项目通过 PutItem 类的 Table 方法插入到表中。PutItem 方法获取 Document 类的实例;Document 类只是已初始化属性的集合。要确定要将项目插入的表格,请调用LoadTable的方法Table类,指定的实例AmazonDynamoDBClient类以及 DynamoDB 中目标表的名称。

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.DocumentModel; var client = new AmazonDynamoDBClient(); var table = Table.LoadTable(client, "AnimalsInventory"); var item = new Document(); item["Id"] = 3; item["Type"] = "Horse"; item["Name"] = "Shadow"; table.PutItem(item);

从表中获取项目

在以下示例中,通过 GetItem 类的 Table 方法检索项目。要确定要获得的物品,GetItem方法使用 hash-and-range 目标项目的主键。要确定从哪个表中获取物品,LoadTable的方法Table类使用的实例AmazonDynamoDBClient类以及 DynamoDB 中目标表的名称。

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.DocumentModel; var client = new AmazonDynamoDBClient(); var table = Table.LoadTable(client, "AnimalsInventory"); var item = table.GetItem(3, "Horse"); Console.WriteLine("Id = " + item["Id"]); Console.WriteLine("Type = " + item["Type"]); Console.WriteLine("Name = " + item["Name"]);

前面的示例为 Id 方法将 TypeNameWriteLine 的属性值隐式转换为字符串。您可以使用 AsType 类的多种 DynamoDBEntry 方法执行显式转换。例如,对于 Id 的属性值,您可以通过 Primitive 方法将其从 AsInt 数据类型显式转换为整数:

int id = item["Id"].AsInt();

或者,您只需使用 (int) 在此处执行显式强制转换:

int id = (int)item["Id"];

对象持久化模型

对象持久化编程模型专门针对在 DynamoDB 中存储、加载和查询 .NET 对象而设计。您可以通过 Amazon.DynamoDBv2.DataModel 命名空间访问此模型。

在三种模型中,使用对象持久化模型最容易针对要存储、加载或查询的 DynamoDB 数据编写代码。例如,您可以直接使用 DynamoDB 数据类型。但是,此模型仅提供对在 DynamoDB 中存储、加载和查询 .NET 对象的操作。例如,您可以使用此模型创建、检索、更新和删除表中的项目。不过,您必须先使用低级模型创建表,然后使用此模型将 .NET 类映射到表。

以下示例向您演示如何定义表示项目的 .NET 类,使用 .NET 类的实例插入项目,以及使用 .NET 对象的实例从 DynamoDB 中的表获取项目。

定义表示表中项目的 .NET 类

在下面的示例中,DynamoDBTable属性指定表名,而DynamoDBHashKeyDynamoDBRangeKey属性对表格的建模 hash-and-range 主键。

// using Amazon.DynamoDBv2.DataModel; [DynamoDBTable("AnimalsInventory")] class Item { [DynamoDBHashKey] public int Id { get; set; } [DynamoDBRangeKey] public string Type { get; set; } public string Name { get; set; } }

使用 .NET 类的实例将项目插入到表中

在本示例中,项目通过 Save 类的 DynamoDBContext 方法插入,该方法接受表示项目的 .NET 类的已初始化实例。(DynamoDBContext 类的实例使用 AmazonDynamoDBClient 类的实例初始化。)

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.DataModel; var client = new AmazonDynamoDBClient(); var context = new DynamoDBContext(client); var item = new Item { Id = 4, Type = "Fish", Name = "Goldie" }; context.Save(item);

使用 .NET 对象的实例从表中获取项目

在此示例中,通过Load的方法DynamoDBContext类,它采用表示 hash-and-range 要检索的项目的主键。(如前所示,DynamoDBContext 类的实例使用 AmazonDynamoDBClient 类的实例初始化。)

// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.DataModel; var client = new AmazonDynamoDBClient(); var context = new DynamoDBContext(client); var item = context.Load<Item>(4, "Fish"); Console.WriteLine("Id = {0}", item.Id); Console.WriteLine("Type = {0}", item.Type); Console.WriteLine("Name = {0}", item.Name);

更多信息

使用Amazon SDK for .NET为 DynamoDB 进行编程信息和示例 **

低级模型信息和示例

文档模型信息和示例

对象持久化模型信息和示例