AWS Lambda并行执行如何与DynamoDB协同工作?

时间:2016-08-27 17:41:43

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

我经历了这个article,它说数据记录被组织成称为Shards的组,这些分片可以被Lambda函数并行使用和处理。 我还从AWS webindar中找到了这些幻灯片,在幻灯片22中,您还可以看到Lambda函数并行使用不同的分片。 但是我无法实现单个函数的并行执行。我创建了一个运行一分钟的简单lambda函数。然后我开始在DynamoDB中创建大量项目,期望获得大量的流记录。尽管如此,我的功能一个接一个地开始。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

从第一篇文章中可以看出:

  

由于分片具有谱系(父级和子级),因此应用程序必须始终在处理子分片之前处理父级分片。这将确保流记录也以正确的顺序处理。

然而,例如,当使用Kinesis流时,您可以通过使用多个分片来实现并行性,因为只有在分片中才能保证处理记录的顺序。

旁注,按顺序触发lambda Dynamodb事件是有道理的。

答案 1 :(得分:0)

上下文相关:

DaynamoDB如何存储数据?

DynamoDB使用partition存储表记录。这些分区是从用户中抽象出来的,并由DynamoDB团队进行管理。随着表中数据的增长,这些分区将在内部进一步划分。

这些发电机流到底是什么?

DynamoDB作为数据库,为用户提供了一种检索有序更改日志的方法(可以将其视为传统数据库的跨国重播日志)。这些被称为Dynamo表streams

数据如何在流中发布?

Stream具有分片的概念(有点类似于分区)。分片根据定义包含有序事件。使用dynamo术语,流分片将包含来自某个分区的数据。

很酷!..如果表中的数据增长或频繁写入,会发生什么?

Dynamo将继续基于HashKey / SortKey将记录保留在其关联分区中,直到违反阈值(如表大小和/或RCU / WCU计数)为止。尽管我们有一些有关粗略估计的文档,但dynamoDB并未将这些阈值的确切值共享给我们。

当达到此阈值时,dynamo会分割分区并进行重新哈希处理,以在整个分区上均匀分布数据(有点)。

自新分区到达以来,这些数据将发布到其自己的分片(映射到其分区)


太好了,那么Lambda呢?然后并行处理如何工作。

一个lambda函数处理来自一个且只有一个分片的记录。因此,发电机流中存在的分片数量将决定并行运行的lambda函数的数量。

大概可以想到,#个分区=#碎片=#个并行lambda运行。