DynamoDB 备忘单 – 2020 年 AWS Certified Developer Associate 认证所需了解的关于 Dynamo DB 的一切

2025-06-05

DynamoDB 备忘单 – 2020 年 AWS Certified Developer Associate 认证所需了解的关于 Dynamo DB 的一切

云服务的出现改变了我们构建 Web 应用程序的方式。这反过来又改变了 Web 开发人员的职责。

我们过去常常将所有内容构建到一台服务器上的单个 Web 应用程序中。这涵盖了存储、数据库、身份验证、后台任务、缓存等多项职责。

通过将责任转移到这些高可用性、可扩展性和持久性的云服务,云服务使我们能够降低 Web 应用程序和 Web 服务器的复杂性。

知道如何部署和集成云服务与 Web 应用程序的 Web 开发人员就是我们所说的云工程师

如果您想在 2020 年快速发展自己作为 Web 开发人员的职业生涯,那么AWS 开发人员助理认证可以帮助您实现这一最终目标。

要通过 AWS Developer Associate 考试,你需要学习的最重要的 AWS 服务是 DynamoDB。因此,我免费发布了终极 DynamoDB 备忘单。你可以在考试当天打印出来,以增加通过的几率。

正是AWS Amplify 的 AWS 开发倡导者Nader建议我免费发布我的整套备忘单。如果没有他,你就不会拥有这份资源。

正是AWS DynamoDB 高级技术专家Kirk自愿贡献时间,确保了这份备忘单的准确性。这使得它从 5 页变成了 8 页!📄📄📄📄📄📄📄📄

如果您有 Twitter,请通过在@dabit3@NoSQLKnowHow上发推文并使用 #AWSCertified 标签来向我表示感谢。

那么让我们继续看备忘单:

DynamoDB 基础知识

DynamoDB是一个完全托管的 NoSQL 键/值和文档数据库。

DynamoDB 适用于具有任意数据量的工作负载,这些工作负载需要可预测的读写性能以及从大到小以及介于两者之间的任何位置的自动扩展。

DynamoDB 可以扩展或缩减,以支持您在预置容量模式下指定的每秒读写容量。或者,您可以将其设置为按需模式,此时几乎无需进行容量规划。

  • DynamoDB在一个区域内的3 个可用区 (AZ) 的SSD 驱动器上存储3 份数据副本
  • DynamoDB 最常见的数据类型是B(二进制)、N(数字)和S(字符串)
  • 表由项目(行)组成,项目由属性(列)组成

读写一致性

DynamoDB 可以设置为在每次调用时支持最终一致性读取(默认)和强一致性读取。

最终一致性读取会立即返回数据,但数据可能不一致。数据副本通常会在 1 秒内达到一致。

强一致性读取始终会从主分区读取,因为它始终拥有最新的副本。数据永远不会不一致,但延迟可能会更高。数据副本将保证 1 秒的一致性。

分区
分区是DynamoDB 将表切分成更小的数据块。这可以加快大型表的读取速度。

DynamoDB 自动为以下项创建分区:

每 10 GB 数据或
超过单个分区的 RCU(3000)或 WCU(1000)限制时
,DynamoDB 会拆分该分区以尝试解决问题。DynamoDB
将尝试在各个分区之间均匀分配RCU 和 WCU。

主键设计

主键定义数据在分区中的存储位置和方式

密钥模式可以由两个密钥组成:

分区键(PK)也称为**HASH *

  • 排序键(SK)也称为范围

使用 AWS DynamoDB API(例如 CLI、SDK)时,由于历史原因,它们使用其他名称来指代主键 (PK) 和关键密钥 (SK)。
主键有两种类型:

  • 简单主键(仅使用分区键)
  • 复合主键(同时使用分区键和排序键)
    键唯一性如下:

  • 创建简单主键时,PK 值可能是唯一的

  • 创建复合主键时,组合的 PK 和 SK 必须是唯一的

使用排序键时,分区上的记录按升序逻辑分组。

二级索引

DynamoDB 有两种类型的索引:

  • LSI——本地二级索引
  • GSI——全球二级指数

LSI——本地二级索引

  • 支持强一致性或最终一致性读取
  • 只能使用初始表创建(不能修改或删除,除非同时删除该表)
  • 仅限复合材料
  • 每个分区 10GB 或更少
  • 与基表共享容量单位
  • 必须与基表共享分区键(PK)。

GSI——全球二级指数

  • 仅限最终一致性读取(无法提供强一致性)
  • 可以随时创建、修改或删除
  • 简单和复合
  • 可以具有任何属性作为主键(PK)或辅助键(SK)
  • 每个分区没有大小限制
  • 有自己的容量设置(不与基表共享)

扫描

您的表应该设计得尽可能避免在工作负载的主要访问模式中使用扫描。总体而言,扫描应该尽可能少用,例如对于不频繁的报表。

  • 扫描表中的所有项目,然后通过过滤器返回一个或多个项目
  • 默认情况下返回每个项目的所有属性(使用 ProjectExpression 进行限制)
  • 扫描是连续的,您可以使用“段”和“总段”通过并行扫描来加速扫描
  • 扫描可能会很慢,特别是对于非常大的表,并且很容易消耗您预配置的吞吐量。
  • 扫描是访问 DynamoDB 中数据最昂贵的方式之一。

询问

  • 根据主键值查找项目
  • 表必须有一个复合键才能查询
  • 默认情况下,查询是最终一致的(使用 ConsistentRead True 来更改强一致性)
  • 默认情况下,返回查询找到的每个项目的所有属性(使用ProjectExpression进行限制)
  • 默认情况下按升序排序(使用ScanIndexForward为 False 可反转为降序)

容量模式

DynamoDB 有两种容量模式:ProvisionedOn-Demand。您可以每 24 小时在这两种模式之间切换一次

已配置

预配置吞吐量容量是指应用程序每秒允许从表或索引读取或写入的最大容量

  • Provisioned 适用于可预测或稳定状态的工作负载
  • RCU 是读取容量单位
  • WCUs 是写入容量单位

您应该启用预置容量模式的 Auto Scaling。在此模式下,您可以设置希望表支持的容量的下限和上限。DynamoDB 将自动为您添加和移除介于这两个值之间的容量,并限制长时间超出上限的调用。

如果超出预配置容量,则会引发异常:ProvisionedThroughputExceededException(限制)

限流是指由于读写频率高于设定的阈值而导致请求被阻止的情况。例如,超出设定的预置容量、分区拆分、表/索引容量不匹配。

一经请求

按需容量按请求付费。因此,您只需按实际使用量付费。

  • 按需模式适用于新的不可预测的工作负载
  • 吞吐量仅受表的默认上限(40K RCU 和 40K WCU)限制
  • 如果您在 30 分钟内超过之前峰值容量(高水位线)的两倍,则可能会发生节流。例如,如果您之前的最高峰值为 30,000 次操作/秒,则无法立即达到 90,000 次操作/秒的峰值,但可以达到 60,000 次操作/秒。
  • 由于没有硬性限制,按需服务可能会根据新兴场景变得非常昂贵

计算读取和写入

计算读取次数 (RCU)

读取容量单位代表:

  • 每秒一次强一致性读取,
  • 或者每秒两次最终一致性读取,
  • 最大为 4 KB 的项目。

如何计算强势

  1. 数据向上舍入到最接近的 4。
  2. 将数据除以 4
  3. 按阅读次数计算

以下是一个例子:

  • 每项读取 50 次,大小为 40KB。(40/4) x 50 = 500 RCU
  • 10 次读取,每个项目 6KB。 (8/4) x 10 = 20 个 RCU
  • 读取 33 次,每次读取 17KB。(20/4) x 33 = 132 个 RCU

如何计算最终的RCU

  1. 数据向上舍入到最接近的 4。
  2. 将数据除以 4
  3. 按阅读次数计算
  4. 将最终数字除以 2
  5. 四舍五入到最接近的整数

以下是一个例子:

  • 每项 40KB,读取 50 次。(40/4) x 50 / 2 = 250 RCU
  • 每项读取 11 次,每次 9KB。(12/4) x 11/2 = 17 RCU
  • 14 次读取,每个项目 24KB。 (24/4) x 14 / 2 = 35 个 RCU

计算写入(Writes)

写入容量单位代表:

  • 每秒一次写入,
  • 对于最大 1 KB 的项目

如何计算写入

  1. 将数据向上舍入到最接近的 1。
  2. 按写入次数计算

以下是一个例子:

  • 每项 40KB,50 次写入。40 x 50 = 2000 WCU
  • 每项 1KB 写入 11 次。1 x 11 = 11 个 WCU
  • 每项 500 字节,共 18 次写入。1 x 18 = 18 WCU

DynamoDB加速器

DynamoDB Accelerator (DAX)是DynamoDB的完全托管内存直写缓存,在集群中运行

  • 读取最终保持一致
  • 传入的请求均匀分布在集群中的所有节点上。
  • DAX 可以将读取响应时间缩短至微秒级

DAX 非常适合:

  • 尽可能最快的响应时间
  • 更频繁地读取少量项目的应用程序
  • 阅读密集型应用

DAX 不适用于:

  • 需要强一致性读取的应用程序
  • 不需要微秒级读取响应时间的应用程序
  • 写入密集型或不执行太多读取活动的应用程序
  • 如果您不需要 DAX,请考虑使用 ElastiCache

DynamoDB 事务

DynamoDB 通过TransactWriteItemsTransactGetItems API 调用支持事务

事务允许您一次查询多个表,并且是一种全有或全无的方法(所有 API 调用都必须成功)。

全局表

DynamoDB 全局表为部署多区域、多主数据库提供了完全托管的解决方案。

DynamoDB Streams允许您设置一个 Lambda 函数,该函数会在每次修改表中的数据时触发,以响应更改。Streams不消耗 RCU。

DynamoDB API

DynamoDB API 通过 CLI 最值得注意的命令:aws dynamodb

aws dynamodb get-item返回具有给定主键的项目的一组属性。如果没有匹配的项目,则它不会返回任何数据,并且响应中不会包含任何 Item 元素。

aws dynamodb put-item创建新项目,或用新项目替换旧项目。如果指定表中已存在与新项目具有相同主键的项目,则新项目将完全替换现有项目。

aws dynamodb update-item编辑现有项目的属性,或者如果新项目不存在则向表中添加新项目。

aws dynamodb batch-get-item会从一个或多个表中返回一个或多个项目的属性。您可以通过主键来识别请求的项目。单次操作最多可检索 16 MB 数据,其中包含多达 100 个项目。

aws dynamodb batch-write-item可在一个或多个表中写入或删除多个项目。最多可写入 16 MB 数据,最多可包含 25 个写入或删除请求。单个项目最大可写入 400 KB。

aws dynamodb create-table会向您的账户添加一个新表。表名称在每个区域内必须是唯一的。

aws dynamodb update-table修改给定表的预配置吞吐量设置、全局二级索引或 DynamoDB Streams 设置。

aws dynamodb delete-table操作删除一个表及其所有项目。

aws dynamodb transact-get-items是一项同步操作,它以原子方式从单个账户和区域中的一个或多个表(但不从索引)检索多个项目。调用最多可包含 25 个对象。事务中项目的总大小不能超过 4 MB。

aws dynamodb transact-write-items是一个同步写入操作,最多可组合 25 个操作请求。这些操作可以针对不同表中的项目,但不能针对不同 AWS 账户或区域中的项目,并且任何两个操作都不能针对同一个项目。

aws dynamodb 查询根据主键值查找项目。您可以查询具有复合主键的表或二级索引。

aws dynamodb scan通过访问表或二级索引中的每个项目来返回一个或多个项目和项目属性。

🚀 #火箭飞向火星

我想帮助你进入网络和云行业。因此,我在 freeCodeCamp YouTube 频道上发布了免费的AWS Developer Associate Certification 2020课程,其中包含 10 多个小时我从未发布过的额外内容。

当我完成最后的润色后,这个免费课程将在几天内发布。

我相信应该让全世界都能接受科技教育,因为反过来,我们越能提高技能,我们就能越早让人们摆脱贫困,我们就能越早设计出可持续的解决方案来保持地球的绿色和健康,我们就能越早向火星发射火箭。

文章来源:https://dev.to/exampro/dynamodb-cheatsheet-everything-you-need-to-know-about-dynamo-db-for-the-2020-aws-certified-developer-associate-certification-5ag
PREV
Expo SDK 37 现已发布
NEXT
AWS 静态网站托管初学者指南(第 2 部分):设置域名