对于 DynamoDB Streams 的更改数据捕获 - Amazon DynamoDB

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

对于 DynamoDB Streams 的更改数据捕获

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

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

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

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

DynamoDB Streams 可以帮助确保:

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

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

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

DynamoDB Streams 的终端节点

AWS为 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 区域和终端节点的完整列表,请参阅。区域和终端节点中的AWS一般参考

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

启用流

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

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

  1. 登录到AWS 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 小时),然后将删除所有流记录。