我有一个触发Lambda函数的DynamoDB Stream。我注意到,对DynamoDB表的一千次写入的爆发可能需要花费很多分钟(我看到的最长时间是30分钟)才能被Lambda处理。批量大小为3的每个Lambda调用的平均持续时间约为2秒。这些Lambdas执行I / O繁重的任务,因此小批量和更多并行调用是有利的。但是,这些Lambdas的并行性与DynamoDB Stream分片的数量挂钩,但我找不到一种扩展分片数量的方法。
除了使用更大的批量大小和更优化的代码之外,有没有办法提高这些Lambdas的吞吐量?
答案 0 :(得分:4)
我也没有看到太多的配置选项。
你可以解耦你的处理。如果您的更改记录不是太大,您的传入Lambda可能会将它们分成几个较小的SNS消息。这些较小的SNS消息中的每一个都可以触发Lambda进行实际处理。 如果更改较大,您可以使用SQS或S3并通过SNS触发Lambda处理新消息或直接触发文件。
答案 1 :(得分:1)
每个流碎片都与DynamoDB中的分区相关联。如果您增加桌面上的吞吐量以致于导致partitions to split,那么您将获得更多分片。使用更多分片时,并行运行的Lambda函数的数量将增加。