对于 DynamoDB Streams 的更改数据捕获 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

对于 DynamoDB Streams 的更改数据捕获

DynamoDB Streams 在任何 DynamoDB 表中捕获按时间排序的项目级修改序列,并将此类信息存储在日志中长达 24 小时。应用程序可访问此日志,并在数据项目修改前后近乎实时地查看所显示的数据项目。

静态加密会加密 DynamoDB 流中的数据。有关更多信息,请参阅DynamoDB 静态加密

ADynamoDB 流是一种有关 DynamoDB 表中的项目更改的有序信息流。当您对表启用流时,DynamoDB 将捕获有关对表中的数据项目进行的每项修改的信息。

每当应用程序在表中创建、更新或删除项目时,DynamoDB Streams 将编写一条具有已修改项目的主键属性的流记录。A流记录包含有关对 DynamoDB 表中的单个项目所做的数据修改的信息。您可以配置流,以便流记录捕获其他信息,例如已修改项目的“前”和“后”图像。

DynamoDB Streams 可以帮助确保:

  • 每个流记录仅在流中显示一次。

  • 对于在 DynamoDB 表中修改的每个项目,流记录将按照对该项目进行的实际修改的顺序显示。

DynamoDB 流近乎实时写入流记录,以便您能构建使用这些流并根据内容采取操作的应用程序。

DynamoDB Streams 的终端节点

Amazon为 DynamoDB 和 DynamoDDynamoDB Streams 维护单独的终端节点。要使用数据库表和索引,您的应用程序必须访问 DynamoDB 终端节点。要读取和处理 DynamoDB Streams 记录,您的应用程序必须访问相同区域内的 DynamoDB 流终端节点。

DynamoDB Streams 端点的命名约定为streams.dynamodb.<region>.amazonaws.com。例如,如果您使用终端节点dynamodb.us-west-2.amazonaws.com来访问 DynamoDB,您将使用端点streams.dynamodb.us-west-2.amazonaws.com访问 DynamoDB Streams。

注意

有关 DynamoDB 和 DynamoDynamoDB Streams 区域和终端节点的完整列表,请参阅。区域和终端节点中的Amazon一般参考

这些区域有:Amazon开发工具包为 DynamoDB 和 DynamoDynamoDB Streams 提供单独的客户端。根据您的要求,您的应用程序可以访问 DynamoDB 终端节点、DynamoDB Streams 终端节点或同时访问二者。要连接到两个端点,您的应用程序必须实例化两个客户端 — 一个用于 DynamoDB,另一个用于 DynamoDB Streams。

启用流

可在新表中使用Amazon CLI或者其中一个Amazon开发工具包。还可以对现有表启用或禁用流,或更改流设置。DynamoDB Streams 是异步执行操作的,因此在启用流的情况下不会影响表的性能。

管理 DynamoDB Streams 的最简单方法是使用Amazon Web Services Management Console。

  1. 登录到Amazon Web Services Management Console,DynamoDB 后在https://console.aws.amazon.com/dynamodb/

  2. 在 DynamoDB 控制台控制面板上,选择,然后选择现有表。

  3. Overview (概述) 选项卡上,选择 Manage Stream (管理流)

  4. 管理流窗口中,选择在修改表中的数据时将写入流中的信息:

    • 仅密钥— 仅所修改项目的键属性。

    • 新映像— 整个项目在修改后的显示。

    • 旧映像— 整个项目在修改前的显示。

    • 新的和旧的映像— 项目的新旧映像。

    根据需要进行设置后,选择 Enable (启用)

  5. (可选)要禁用现有流,请选择 Manage Stream (管理流),然后选择 Disable (禁用)

您还可以使用 CreateTableUpdateTable API 操作来启用或修改流。StreamSpecification 参数确定如何配置流:

  • StreamEnabled— 指定是否启用流 (true)或已禁用(false)作为表。

  • StreamViewType— 指定在修改表中的数据时将写入流中的信息:

    • KEYS_ONLY— 仅所修改项目的键属性。

    • NEW_IMAGE— 整个项目在修改后的显示。

    • OLD_IMAGE— 整个项目在修改前的显示。

    • NEW_AND_OLD_IMAGES— 项目的新旧映像。

您可以随时启用或禁用流。但是,如果您尝试在已有流的表上启用流,则会收到 ResourceInUseException。如果您尝试在没有流的表上禁用流,则会收到 ValidationException

当您设置StreamEnabledtrue中,DynamoDB 将创建一个新流,并为其分配一个唯一的流描述符。如果您在表上禁用然后重新启用流,则将创建一个具有不同流描述符的新流。

每个流均由一个 Amazon 资源名称 (ARN) 进行唯一标识。以下是 DynamoDB 表中一个流的示例 ARN。TestTable

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

要确定表的最新流描述符,请发出 DynamoDBDescribeTable请求并查找LatestStreamArn元素。

读取和处理流

要读取和处理流,您的应用程序必须连接到 DynamoDB Streams 终端节点并发出 API 请求。

流由流记录 构成。每条流记录均代表流所在的 DynamoDB 表中的一个数据修改。每条流记录均分配有一个序列号,该序列号反映了将记录发布至流的顺序。

流记录将组织到群组或分区 中。每个分区可充当多条流记录的容器,并包含访问和迭代这些记录所需的信息。分区中的流记录将在 24 小时后自动删除。

碎片是短暂的:将根据需要自动创建和删除它们。此外,任何分区均可拆分为多个新分区;这也是自动进行的。(请注意,父分片还可能只有一个子分片。) 分区可能会在响应其父表上的高级写入活动时拆分,以便应用程序可以并行处理来自多个分区的记录。

如果您禁用流,将关闭已打开的分区。流中的数据将在 24 小时内继续可读。

由于分区存在沿袭 (父分区和子分区),应用程序必须始终先处理父分区,然后再处理子分区。这可帮助确保流记录也会按正确顺序进行处理。(如果您使用 DynamoDB Streams Kinesis Adapter,则会为您进行处理。) 您的应用程序按正确顺序处理分片和流记录。 它自动处理新分片或过期分片,以及在应用程序运行期间拆分的分片。 有关更多信息,请参阅 。使用 DynamoDB Streams Kinesis 适配器处理流记录。)

下图显示流、流中的分区和分区中的流记录之间的关系。

注意

如果您执行PutItem或者UpdateItem操作不更改项目中的任何数据,DynamoDB Streams 会执行为该操作编写流记录。

要访问流和处理其中的流记录,您必须执行以下操作:

  • 确定您要访问的流的唯一 ARN。

  • 确定流中的哪些分片包含您感兴趣的流记录。

  • 访问分片并检索所需的流记录。

注意

从同一流分片中同时读取的进程最多不得超过 2 个。读取器超过 2 个的分片可能会受到限制。

DynamoDB Streams API 提供以下操作以供应用程序使用:

  • ListStreams— 返回当前账户和终端节点的流描述符列表。(可选) 您可以只请求特定表名称的流描述符。

  • DescribeStream— 返回有关给定流的详细信息。输出包含与流关联的分区的列表 (包括分区 ID)。

  • GetShardIterator— 返回分片迭代器,描述分片中位置。您可以请求该迭代器提供对流中最旧的点、最新的点或某个特定点的访问权。

  • GetRecords— 返回来自给定分片中的流记录。您必须提供从 GetShardIterator 请求中返回的分区迭代器。

有关这些 API 操作的完整描述(包括示例请求和响应),请参阅Amazon DynamoDB Streams API 参考

DynamoDB Streams 的数据保留限制

DynamoDB Streams 中的所有数据的生命周期为 24 小时。您可以检索和分析任意给定表过去 24 小时的活动。但是,24 小时之前的数据可能会随时被修剪(删除)。

如果您对某个表禁用一个流,该流中的数据仍在 24 小时内可读。此时间过后,数据将过期,并且流记录将自动被删除。没有手动删除现有流的机制。您必须等待直至保留期限过期(24 小时),然后将删除所有流记录。