0Pricing
Cloud & IT Cert Prep · 课时

DynamoDB Streams 与全局表

使用 Streams 实时处理项目级变更,并通过全局表在多个区域间复制数据,以支持全球低延迟读取。

DynamoDB Streams 与全局表 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

DynamoDB 流:变更数据捕获

DynamoDB 流会捕获 DynamoDB 表中项目级修改按时间排序的序列。每当创建、更新或删除项目时,DynamoDB 都会写入一条描述该变更的流记录。流记录在写入后 24 小时内可用。

流是使用 DynamoDB 构建事件驱动架构的基础。常见用途包括触发 Lambda 函数进行实时处理、维护审计日志、将数据复制到其他存储中,或在数据发生变化时使缓存失效。

# Enable a DynamoDB Stream on an existing table
aws dynamodb update-table \
  --table-name Orders \
  --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES

流视图类型

启用流时,您需要选择 StreamViewType,它决定每条流记录包含哪些数据:

  • KEYS_ONLY:仅包含修改项目的主键属性
  • NEW_IMAGE:变更后项目的完整内容
  • OLD_IMAGE:变更前项目的完整内容
  • NEW_AND_OLD_IMAGES:项目变更前后的两种状态

审计时请选择 NEW_AND_OLD_IMAGES(以查看发生了哪些变化);复制数据或更新缓存时请选择 NEW_IMAGE;如果只需要知道哪个项目发生了变化,并会另外获取其当前状态,请选择 KEYS_ONLY。

使用 Lambda 处理流

使用 DynamoDB 流最常见的方式是结合 AWS Lambda。Lambda 会轮询流,并将一批流记录传递给您的函数。Lambda 会自动处理轮询、检查点记录和重试。

主要配置参数包括:批大小(每次调用的记录数,最多 10,000 条)、出错时二分拆分(拆分失败的批次,以隔离有问题的记录),以及失败时的目标(使用 SQS 或 SNS 处理无法处理的记录)。Lambda 会并行读取每个分片,因此并行度等于流中的分片数量。

# Add Lambda as a stream trigger via CLI
aws lambda create-event-source-mapping \
  --function-name process-orders-stream \
  --event-source-arn arn:aws:dynamodb:us-east-1:123456789:table/Orders/stream/2026-06-20T00:00:00.000 \
  --starting-position LATEST \
  --batch-size 100 \
  --bisect-batch-on-function-error

流的使用场景

SAA-C03 考试中 DynamoDB 流的实际使用场景:

  • 跨区域复制:Lambda 读取流,并将变更写入另一个 Region 中的表(在全局表出现之前,这是标准模式)
  • ElastiCache 缓存失效:DynamoDB 项目发生变化时,Lambda 使相应的缓存键失效或更新该缓存键
  • 搜索索引同步:将项目变更推送到 OpenSearch 服务,以便对 DynamoDB 数据启用全文搜索
  • 审计日志记录:将每次变更写入 S3 或合规存储,以满足监管要求
  • 事件驱动的微服务:当特定项目发生变化时触发下游服务

DynamoDB 全局表:是什么以及为什么使用

DynamoDB 全局表提供完全托管的多区域多活复制。每个 Region 都会获得该表的完整副本,并且所有副本都可以同时接受写入。任一 Region 中的写入都会在大约 1 秒内异步复制到所有其他 Region。

全局表支持两种关键场景:为全球分布的用户提供低延迟读取和写入(每个用户都在最近的 Region 中进行读写),以及实现多区域主动-主动灾难恢复(应用程序可以在任何仍存活的 Region 中继续运行,且不会丢失上次复制之后的数据)。

创建全局表

要创建全局表,您首先需要创建一个已启用 DynamoDB 流的表(全局表在内部要求使用 NEW_AND_OLD_IMAGES)。然后添加副本 Region。AWS 会在每个新增的 Region 中创建副本表,并开始双向同步数据。

全局表(版本 2019.11.21)是当前标准,支持使用 Auto Scaling 的按需容量或预配容量。每个 Region 副本必须使用相同的表名。您可以随时向全局表添加或移除 Region。

# Create a global table replica in eu-west-1
aws dynamodb create-global-table \
  --global-table-name GlobalOrders \
  --replication-group RegionName=us-east-1 RegionName=eu-west-1

全局表中的冲突解决

由于全局表允许在多个 Region 中同时写入,如果两个 Region 几乎同时更新同一个项目,就可能发生写入冲突。DynamoDB 会根据流记录中存储的时间戳,使用最后写入者胜出的方法解决冲突。

实际上,这意味着两个几乎同时发生的冲突更新中,一个会生效,另一个会被覆盖。应用程序应进行相应设计,避免来自不同 Region 的并发写入修改同一个项目。对于经常发生冲突的使用场景,请考虑将某个用户或实体的所有写入路由到一个固定的主 Region。

全局表与容量注意事项

使用全局表时,一个 Region 中的写入会自动复制到所有其他 Region。每次复制的写入都会消耗目标 Region 中的写容量单位——如果有 3 个 Region,则一次写入在所有 Region 中的总成本约为 3 倍写容量单位。请据此规划容量。

每个 Region 中的读取会消耗本地副本的读容量单位。最终一致性读取(默认设置)使用本地数据,而跨 Region 不支持强一致性读取。对于大多数全球应用,在 Region 之间约 1 秒内实现最终一致性是可以接受的。

全局表与跨区域只读副本(RDS)

SAA-C03 考试中的一个关键区别是:DynamoDB 全局表是多活的(所有 Region 都接受读取和写入),而 RDS 跨区域只读副本是只读的(您只能提升副本使其可写,但这会中断复制)。

在需要以下能力时,请使用 DynamoDB 全局表:多区域主动-主动写入、全球低于 100 毫秒的访问延迟,或面向 NoSQL 数据的零 RPO 多区域灾难恢复。在需要以下能力时,请使用 RDS 跨区域副本:关系数据库的全球读取扩展能力,或可在故障转移时提升为主库的热备用灾难恢复副本。

流与 Lambda 架构模式

结合流和 Lambda 的常见架构模式:

  • 扇出:Lambda 读取流并发布到 SNS,SNS 再将消息分发到多个 SQS 队列,供相互独立的使用者处理
  • 聚合:Lambda 累积变更,并在单独的 DynamoDB 表中更新聚合总量(例如每日订单数量)
  • 写后缓存:每发生一个流事件,Lambda 就更新 ElastiCache,使读取可以从缓存中提供
  • 通知:流触发 Lambda;当特定条件发生变化时,Lambda 发送 SES 电子邮件或 SNS 推送通知

DynamoDB Kinesis Data Streams 集成

作为 DynamoDB Streams 的替代方案,您可以将项目级更改定向到亚马逊 Kinesis Data Stream。当您需要更长的保留时间(最长 1 年,而原生 DynamoDB Streams 为 24 小时)、更多使用者,或需要与读取 Kinesis 的服务集成时,这种方式非常有用。

Kinesis Data Streams 集成按表启用,并不会替代 DynamoDB Streams——您可以同时启用两者。这是一项较新的功能(2021 年推出),可以扩展 DynamoDB 更改事件处理流程,而无需编写自定义复制逻辑。

# Enable Kinesis Data Streams for a DynamoDB table
aws dynamodb enable-kinesis-streaming-destination \
  --table-name Orders \
  --stream-arn arn:aws:kinesis:us-east-1:123456789:stream/ddb-changes

快速检查

测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

本课学习了以下内容:DynamoDB Streams 会捕获项目级更改并保留 24 小时,并与 Lambda 集成以进行事件驱动处理;Global Tables 提供多活多区域复制,并采用最后写入者获胜的冲突解决机制;Kinesis Data Streams 集成可将保留时间延长到 24 小时的流窗口之外。接下来,我们将学习 Route 53 托管区域和 DNS 记录类型。

常见问题解答

「DynamoDB Streams 与全局表」课时是免费的吗?

是的 — 「DynamoDB Streams 与全局表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「DynamoDB Streams 与全局表」这节课中我会学到什么?

使用 Streams 实时处理项目级变更,并通过全局表在多个区域间复制数据,以支持全球低延迟读取。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「DynamoDB Streams 与全局表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 表、项目与主键
  2. 预置容量与按需容量
  3. 全局二级索引与本地二级索引
  4. DynamoDB Streams 与全局表
← 返回 Cloud & IT Cert Prep