当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda并行执行如何与DynamoDB一起工作?

陆臻
2023-03-14

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

我做错了什么?

共有2个答案

江棋
2023-03-14

前上下文:

DaynamoDB如何存储数据?

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

这些发电机流是怎么回事?

DynamoDB作为一个数据库,为用户提供了一种检索有序更改日志的方法(将其视为传统数据库的跨国重放日志)。这些是作为Dynamo table streams出售的。

数据如何在流中发布?

Stream有一个分片的概念(有点类似于分区)。按定义,碎片包含有序的事件。使用发电机术语,流分片将包含来自某个分区的数据。

凉的那个么,若表中的数据增长或频繁写入,会发生什么情况呢?

Dynamo将基于HashKey/SortKey在其相关分区中保持记录,直到超过阈值(如表大小和/或RCU/WCU计数)。dynamoDB没有向我们提供这些阈值的确切值,尽管我们有一些关于粗略估计的文档。

当这个阈值被突破时,发电机会拆分分区,并重新进行哈希处理,以(在一定程度上)均匀地分布整个分区的数据。

由于新分区已经到达,这些数据将发布到它自己的分片(映射到它的分区)

很好那Lambda呢?那么并行处理是如何工作的。

一个lambda函数进程记录一个且仅一个碎片。因此,dynamo流中存在的碎片数量将决定并行运行lambda函数的数量。

你可以模糊地想象,分区的碎片=并行lambda运行的碎片。

汤承德
2023-03-14

第一篇文章说:

因为碎片有一个谱系(父碎片和子碎片),所以应用程序必须在处理子碎片之前始终处理父碎片。这将确保流记录也以正确的顺序进行处理。

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

附带说明,按顺序触发lambdaDynamodb事件是有意义的。

 类似资料:
  • 我有一个2节点的Spark集群,每个节点有4个核心。 null 根据文档: Spark将为集群的每个部分运行一个任务。通常情况下,集群中的每个CPU需要2-4个片。 我将slices设置为8,这意味着工作集将被划分为集群上的8个任务,反过来每个工作节点得到4个任务(每个核心1:1) 我假设理想情况下,我们应该调优,使其与每个节点(在同构集群中)中的核数相对应,以便每个核获得自己的执行器和任务(1:

  • 问题内容: 我正在测试詹金斯,看它是否适合我们的构建和测试框架。我发现Jenkins及其可用的插件可以满足我们的大多数需求。除了我似乎无法找到有关如何执行一种特定类型任务的帮助。 我们正在为嵌入式设备创建应用程序。我们需要在这些设备上运行100项测试。如果我们在构建后在一台设备上运行所有测试,那么将需要几个小时才能获得结果。但是,如果我们在100个设备上并行运行测试,则可以在更短的时间内获得结果。

  • 我已经定制了我的执行器/信息endpoint,并且我想使用来自头的信息授权对另一个服务的调用。 我在这里实现了InfoContributor:https://www.baeldung.com/spring-boot-info-acture-custom 我想接受方法中的请求头。对于任何用户定义的RESTendpoint,我都可以定义参数并访问头。 但不幸的是,的方法只采用一个参数。 如何访问方法中

  • 我在一个项目中工作,我想插入到两个不同的表中,所以我写了这两个查询(query1,query2),当我只使用一个查询运行程序时,我没有得到任何异常,但当一起执行时,我有一堆异常,我使用了preparedStatement execute(),但没有工作注意:我不是很有经验,请简单解释

  • 求帮助并行执行cucumber7。我的项目是cucumber和爪哇宁静。在这个链接https://johnfergusonsmart . com/parallel-test-execution-with-cucumber-and-serenity-BDD/中,它显示可以运行,但尝试了不同的组合,看起来我错过了一些东西。 这是我的pom。xml文件: 4.0.0 要执行:我将相同的标签添加到多个功能

  • 我在src/test/resources/feature/中有以下功能文件(单独的功能文件),我想并行运行它们。比如:一个功能文件必须在chrome中执行,另一个必须在另一个chrome实例中执行,如@Tags name所述。 我正在使用Java1.2。5版本,AbstractTestNGCucumberTests作为runner。我可以运行一个功能文件,但当我尝试使用cucumber jvm并行