AWS Lambda函数的快速数据访问

时间:2017-02-04 00:21:10

标签: python amazon-web-services aws-lambda amazon-kinesis-firehose

我有一个基于python的lambda函数,该函数基于kinesis firehose流触发s3 put操作,该流以每分钟大约10k条记录的速率发送数据。现在,lambda函数只执行一些小的数据修正,并以100的批量将其传递给logstash实例.lambda执行时间为5-12秒,因为它每分钟都运行一次。

在将数据发送到logstash之前,我们正在考虑使用更多信息来丰富流数据。进来的每条消息都有一个“id”字段,我们想在某种数据库中查找该id,从数据库中获取一些额外的信息,并在传递之前将其注入对象。

问题是,我不能让它足够快。 我尝试将所有数据(600k记录)加载到DynamoDB中,并在lambda函数中的每个记录循环上执行查找。这会过度减慢执行速度。然后我想我们不必两次查找相同的id,所以我使用一个列表obj来保存已经“查找”的数据 - 这使得执行时间有所下降,但仍然没有接近我们的'我喜欢。

然后我考虑预加载整个数据库数据集。我测试了这一点 - 在开始循环来自s3对象的每条记录之前,简单地将来自dynamodb的所有600条记录转储到“缓存列表”对象中。数据转储大约一分钟,但缓存列表现在非常大,每次查找都需要5秒(比点击数据库慢)。

我对这里做了什么感到茫然 - 我完全意识到lambda可能不适合这个,如果我们不能让它工作,我们可能会转向其他产品,但首先我以为我会看到社区是否有一些关于如何加速这件事的指示。

1 个答案:

答案 0 :(得分:1)

将数据预加载到Redis服务器。这正是Redis擅长的。