Amazon DynamoDB - AWS Mobile SDK

AWS SDK for .NET 现在包括适用于 Xamarin 的 AWS Mobile SDK。本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。

Amazon DynamoDB

什么是 Amazon DynamoDB?

Amazon DynamoDB 是一个快速、高度可扩展的非关系型数据库服务。DynamoDB 消除了传统上对数据存储可扩展性的限制,同时保留了低延迟性和可预测的性能。

重要概念

DynamoDB 数据模型概念包括表、项目和属性。

在 Amazon DynamoDB 中,数据库是表的集合。表是项目的集合,而每个项目是属性的集合。

在关系数据库中,表具有预定义的架构,例如表名、主键、其列名称列表及其数据类型。存储在表中的所有记录必须具有相同的列集。相反,DynamoDB 只需要表具有一个主键,而不需要您预先定义所有属性名称和数据类型。

要了解使用表的更多信息,请参阅使用 DynamoDB 表

项目和属性

DynamoDB 表中的各个项目可以有任意数量的属性,但项目大小的上限为 400 KB。项目大小是其属性名称和值的长度总和(二进制和 UTF-8 长度)。

项目中的每个属性都是名称值对。属性可以是单值或多值。例如,书籍项目可以具有标题和作者属性。每本书都有一个书名,但可以有多个作者。多值属性是一个集合;不允许使用重复的值。

例如,假设要在 DynamoDB 中存储产品目录。您可以创建一个表 (ProductCatalog),其中将 Id 属性作为其主键。主键唯一地标识每一项,因此,表中不会有两个产品具有相同 ID。

要了解使用项目的更多信息,请参阅使用 DynamoDB 项目

数据类型

Amazon DynamoDB 支持以下数据类型:

  • 标量类型 – 数字、字符串、二进制、布尔和 Null。

  • 多值类型 – 字符串集、数字集和二进制集。

  • 文档类型 – 列表和映射。

有关标量数据类型、多值数据类型和文档数据类型的更多信息,请参阅 DynamoDB 数据类型

主键

创建表时,除表名称外,您还必须指定表的主键。主键唯一标识表中的每个项目,因此,任意两个项目的主键都不相同。DynamoDB 支持以下两类主键:

  • 哈希主键 – 这类主键由一个属性(哈希属性)构成。DynamoDB 基于此主键属性构建无序的哈希索引。表中的每个项目由其哈希键值进行唯一标识。

  • 哈希和范围主键 – 这类主键由两个属性构成。第一个属性是哈希属性,第二个属性是范围属性。DynamoDB 基于哈希主键属性构建无序的哈希索引,基于范围主键属性构建有序的范围索引。表中的每一项由其哈希和范围键值的组合进行唯一标识。两个项目可能具有相同的哈希键值,但是这两个项目必须具有不同的范围键值。

二级索引

当您创建具有哈希和范围键的表时,可以选择在该表上定义一个或多个二级索引。利用二级索引,除了可对主键进行查询外,还可使用替代键查询表中的数据。

DynamoDB 支持两种类型的二级索引:本地二级索引和全局二级索引。

  • 本地二级索引:具有与表相同的哈希键、不同范围键的索引。

  • 全局二级索引:具有与表不同的哈希键和范围键的索引。

您最多可以为每个表定义 5 个全局二级索引和 5 个本地二级索引。有关更多信息,请参阅《DynamoDB 开发人员指南》中的在 DynamoDB 中使用二级索引改善数据访问

查询和扫描

除使用主键来访问项目外,Amazon DynamoDB 还提供两个 API 用于搜索数据:查询和扫描。建议您阅读《DynamoDB 开发人员指南》中的查询和扫描指南,以熟悉一些最佳实践。

查询

查询操作仅使用主键属性值查找表或二级索引中的项目。您必须提供哈希键属性名称和要搜索的确切值。您可以选择提供范围键属性名称和值,并使用比较运算符来优化搜索结果。

有关示例查询,请参阅:

有关查询的更多信息,请参阅《DynamoDB 开发人员指南》中的查询

Scan

扫描操作读取表或二级索引中的每个项目。默认情况下,扫描操作返回表或索引中每个项目的全部数据属性。您可以使用 ProjectionExpression 参数,以便扫描仅返回部分而非全部属性。

有关示例扫描,请参阅:

有关扫描的更多信息,请参阅《DynamoDB 开发人员指南》中的扫描

项目设置

先决条件

要在您的应用程序中使用 DynamoDB,需要将开发工具包添加到您的项目中。为此,请按照设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK 中的说明操作。

创建 DynamoDB 表

要创建表,请转至 DynamoDB 控制台并执行以下步骤:

  1. 单击创建表

  2. 输入表的名称。

  3. 选择 Hash 作为主键类型。

  4. 选择一个类型并输入哈希属性名称的值。单击继续

  5. 添加索引页面上,如果您计划使用全局二级索引,请将索引类型设置为“全局二级索引”,然后在索引哈希键下,输入二级索引的值。这将使您能够同时使用主索引和二级索引进行查询和扫描。单击将索引添加到表,然后单击继续。要跳过使用全局二级索引,请单击 Continue

  6. 将读取和写入容量设置为所需水平。有关配置容量的更多信息,请参阅 Amazon DynamoDB 中预配置的吞吐量。单击继续

  7. 在下一个屏幕中,输入通知电子邮件以创建吞吐量警报(如果需要)。单击继续

  8. 在摘要页面上,单击创建。DynamoDB 将创建您的数据库。

设置 DynamoDB 的权限

要在应用程序中使用 DynamoDB,必须设置正确的权限。以下 IAM 策略允许用户删除、获取、放置、查询、扫描和更新特定的用 ARN 标识的 DynamoDB 表中的项目:

{ "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" } ] }

您可以在 IAM 控制台中修改策略。应根据您的应用程序的需要添加或删除允许的操作。

要了解有关 IAM 策略的更多信息,请参阅使用 IAM

要了解更多有关 DynamoDB 特定策略的信息,请参阅《DynamoDB 开发人员指南》中的使用 IAM 控制对 DynamoDB 资源的访问

将 DynamoDB 与您的应用程序集成

适用于 .NET 和 Xamarin 的 AWS Mobile SDK 可为您使用 DynamoDB 提供高级库。您也可以直接针对低级 DynamoDB API 发出请求,但在大多数情况下,建议您使用高级库。AmazonDynamoDBClient 是高级库中一个特别有用的部分。使用此类,您可以执行创建、读取、更新和删除 (CRUD) 操作和执行查询。

借助适用于 .NET 和 Xamarin 的 AWS Mobile SDK,您可以使用适用于 .NET 的 AWS SDK 提供的 API 进行调用来使用 DynamoDB。所有这些 API 均在 AWSSDK.dll 中提供。有关下载适用于 .NET 的 AWS SDK 的信息,请参阅适用于 .NET 的 AWS SDK

您可以通过三种方式在您的 Xamarin 应用程序中与 DynamoDB 交互:

  • 文档模型:该 API 提供有关低级 DyanmoDB API 的封装类,以进一步简化编程任务。表和文档是主要的封装类。您可以使用文档模式执行数据操作,例如创建、检索、更新和删除项目。该 API 在 Amazon.DynamoDB.DocumentModel 命名空间中提供。

  • 对象持久化模型:对象持久化 API 允许您将客户端类映射到 DynamoDB 表。然后,每个对象实例映射到对应表中的项目。通过此 API 中的 DynamoDBContext 类提供的方法,您可以将客户端数据元保存到表、将项目作为数据元进行检索,以及执行查询和扫描。您可以使用对象持久化模型执行数据操作,例如创建、检索、更新和删除项目。您必须先使用服务客户端 API 创建表,然后才能使用对象持久化模型将类映射到表。该 API 在 Amazon.DynamoDB.DataModel 命名空间中提供。

  • 服务客户端 API:这是与 DynamoDB API 密切相关的协议级 API。您可以针对所有表和项目操作(例如创建、更新、删除表和项目)使用该低级 API。您还可以查询和扫描自己的表。该 API 在 Amazon.DynamoDB 命名空间中提供。

以下主题更深入地探讨了这三个模型:

主题