关于DynamoDB Streams和Lambda的启动顺序。

0

【以下的问题经过翻译处理】 在配置了分区键和排序键的表中,使用相同的分区键插入多条记录。

Lambda函数被配置为处理DynamoDB流。并且将ParallelizationFactor设置为1。

此时,Lambda启动顺序总是按插入顺序进行串行执行吗?

例如,首先准备以下表。

groupIdseq其他属性
<分区键><排序键>

接下来,按顺序添加以下数据。

① groupId = 1,seq = 1

② groupId = 1,seq = 2

③ groupId = 1,seq = 3

④ groupId = 1,seq = 4

然后,结果如下。

groupId<PK>seq<SK>其他属性
11
12
13
14

此时,Lambda启动顺序总是按照添加顺序进行串行执行吗?它能并行运行吗?

如果Lambda有以下相同的分区键(但排序键不同),它是否会始终按顺序启动? Enter image description here

profile picture
专家
已提问 8 个月前33 查看次数
1 回答
0

【以下的回答经过翻译处理】 这个问题的其他回答似乎有点含糊不清,不能完全理解流中项目的排序。虽然一些答案强调了关键部分,但它们往往没有提供整体的大局观。让我试着解释一下流如何按顺序排序:

首先让我们了解一下DynamoDB分区是什么: 为了向表中写入项目,DynamoDB计算分区键的哈希值,以确定应该包含项目的分区。在该分区中,可能有几个具有相同分区键值的项目。因此,DynamoDB按升序排列的排序键在其他相同分区键的项目中存储项目。

接下来是分区和分片之间的关系: DynamoDB上的每个分区与一个DynamoDB(active)Stream Shard成1:1映射。这意味着具有相同分区键的项目将进入DynamoDB Stream上的相同分片(稍后重要的警告)。

最后是分片和Lambda消费者之间的关系: 在DynamoDB的流上,每个分片与一个Lambda容器映射成1:1。这意味着进入给定分片的所有项目将由同一个Lambda函数处理,并且它们将保持它们写入分区的相同顺序。

总结上述3点: “分区:分片:Lambda”的关系是“1:1:1”。我们现在知道写入任何给定分区的每个项目都将按它们的编写顺序进入给定的分片,并最终在Lambda中消耗相同的顺序。

现在是警告: 大多数情况下,具有相同分区键的项目将共享同一个分区,这意味着项目集合(所有共享相同分区键的项目)的排序是保持不变的。然而,并不能保证项目集合将保留在同一个分区中,一个项目集合可能会因为多种原因而分割到多个分区中:

该项目集合的吞吐量超过了1000WCU或3000RCU的硬限制,自适应容量已经将集合分割以提供更多吞吐量。
项目集合超过了一个分区的10GB存储大小限制,集合已经被分割以提供更多存储。

正因如此,DynamoDB Streams 仅在项目级别保证排序,该项目既共享相同的分区键又共享相同的排序键。

DynamoDB Streams 捕获任何 DynamoDB 表中基于时间排序的项目级别修改序列,并将此信息存储在日志中,最长保留24小时。应用程序可以访问此日志,并实时查看数据项在修改前后的状态。

DynamoDB 流是关于 DynamoDB 表中项目更改的有序信息流。当您在表上启用流时,DynamoDB 会捕获有关表中数据项的每次修改的信息。

直接回答:

接下来,按顺序添加以下数据。 ‘’‘ ① groupId = 1, seq = 1 ② groupId = 1, seq = 2 ③ groupId = 1, seq = 3 ④ groupId = 1, seq = 4 ’‘’ 由于这些项目共享不同的排序键,所以如上所述,排序不能得到保证。虽然不能保证绝对的排序,但大多数情况下它们会是有序的,但您应该注意前面提到的注意事项,并确保您不会对项目的顺序性产生依赖。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则