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