我有一个基于python的lambda函数,该函数在基于kinesis firehose流的s3 put操作上触发,该流以每分钟约10k条记录的速率发送数据。现在,lambda函数只是对数据进行一些小的修正,并以100为批次将其交付给logstash实例。lambda执行时间为5到12秒,这很好,因为它每分钟运行一次。
我们正在考虑在将流数据发送到logstash之前,使用一些更多信息来丰富它们。每个传入的消息都有一个“ id”字段,我们希望针对某种类型的数据库查找该ID,从数据库中获取一些额外的信息,然后将其注入对象中,然后再传递给它。
问题是,我无法使其运行足够快。我尝试将所有数据(600k条记录)加载到DynamoDB中,并在lambda函数中的每个记录循环上执行查找。这会大大降低执行速度。然后我发现我们不必两次查找相同的id,因此我使用列表obj来保存已经“查找”的数据-这虽然使执行时间有所缩短,但仍与我们的执行时间相差无几d喜欢。
然后,我考虑了预加载整个数据库数据集。我对此进行了测试-只需将dynamodb中的所有600条记录转储到“缓存列表”对象中,然后再开始循环遍历s3对象中的每条记录。数据在大约一分钟内转储,但是缓存列表现在是如此之大,以至于每次查找都需要5秒钟(比命中数据库要慢得多)。
我对这里的操作不知所措-我完全意识到lambda可能不是此平台的正确选择,如果我们无法使其正常运行,我们可能会转向其他产品,但是首先我想我是d查看社区是否对如何加快处理速度提出了一些建议。
将数据预加载到Redis服务器中。这正是Redis擅长的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句