【问题标题】:AWS DynamoDB trigger invocation speed and synchronizationAWS DynamoDB 触发器调用速度和同步
【发布时间】:2017-03-25 23:31:57
【问题描述】:

DynamoDB 表上的触发器是否具有某种内部同步功能以使所有内容保持应有的顺序? 示例:我的触发器批量大小为 1,并且配置为始终从最新条目开始读取。以一毫秒的间隔(或同时)向数据库创建两个条目。我不知道调用触发器和 lambda 函数所需的时间,但我们假设它比 DB 条目之间的时间长(> 1ms)。我可以确定两个 lambda 调用都没有收到来自第二个数据库条目的数据吗?

【问题讨论】:

  • 你的意思是触发 lambda 函数的 Dynamodb 流吗?
  • 是的,这正是我的意思。我应该更清楚

标签: amazon-web-services lambda amazon-dynamodb aws-lambda


【解决方案1】:

DynamoDB Streams 不会发送重复数据。

不,DynamoDB Streams 的设计目的是让您的每次更新 表将在流中仅表示一次。

DynamoDB Streams 保证以下几点:

每个流记录在流中仅出现一次。对于每个项目 在 DynamoDB 表中修改,流记录出现在 与项目的实际修改顺序相同。

DynamoDB Streams 提供对表中数据进行的项目级更改的按时间排序的序列

由于更新 1 和 2 之间存在几毫秒的差异,Lambda 应该按时间顺序获取两个流(即更新 1,然后更新 2)。

在lamdba上处理流记录:-

发送到您的 AWS 的 Amazon Kinesis 和 DynamoDB Streams 记录 Lambda 函数是严格序列化的,每个分片。这意味着如果 您将两条记录放在同一个分片中,Lambda 保证您的 将使用第一条记录成功调用 Lambda 函数 在使用第二条记录调用它之前。如果调用一个 记录超时、被限制或遇到任何其他错误,Lambda 将重试直到成功(或记录达到其 24 小时 到期),然后再继续下一条记录。的排序 不保证跨不同分片的记录,并且处理 每个分片并行发生。

基于流的事件源

如果您创建一个 Lambda 函数来处理来自 基于流的服务(Amazon Kinesis Streams 或 DynamoDB 流), 每个流的分片数是并发单位。如果你的 流有 100 个活动分片,将有 100 个 Lambda 函数 同时运行。然后,每个 Lambda 函数在 按照它们到达的顺序分片。

简答:-

  • 流确保没有重复。所以没有办法 2 Lambda 调用接收相同的数据

  • Reg处理流记录即是否第二次更新
    在第一次更新处理后开始处理取决于分片 每个流(并发单位)

由于分片具有沿袭(父分片和子分片),因此应用程序必须始终先处理父分片,然后再处理子分片。这将确保流记录也以正确的顺序进行处理。如果您想保留正确的处理顺序,请使用 DynamoDB Streams Kinesis Adapter

【讨论】:

  • 优秀的答案。谢谢!
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2020-04-24
  • 2022-12-14
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
相关资源
最近更新 更多