AWS无服务器CSV队列到CSV架构

AWS无服务器CSV队列到CSV架构

问题描述:

我目前正在使用AWS处理一些无服务器的CSV处理。对EC2和Dynamo非常熟悉。我确信有更好的方式来构造这个,我还没有找到一个有效的方式来存储数据。任何建筑建议将不胜感激。AWS无服务器CSV队列到CSV架构

该流程将采用上传到S3的CSV,处理元组的所有行,并将处理后的数据的新CSV输出到S3。

什么是1)结构优化和2)来存储数据之前的队列是完整的,直到CSV可建

最佳位置

数据流和业务结构:

CSV(包含元组)( S3) - > CSV处理(Lambda) - >队列(SNS) - >队列处理(Lambda) - > ?????在写入CSV之前处理过的队列项的临时存储空间? (在这里使用什么?) - > CSV建设(Lambda) - > CSV存储(S3)

聪明的想法赞赏。

+0

行的顺序是否有任何关系? – Sanandrea

我相信你是在复杂的事情

S3可以触发事件发生时调用一个lambda函数。这是直接设置在S3桶事件通知

所以用这个方法,使CSV的转换后的版本在另一桶

亚马逊有一个如何做这样的事情划上

为例http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

+0

谢谢,我正在使用S3触发器。但是,如果我将csv中的50000个元组加载到lambda中,则处理时间太长。它可以逐项完成(这会更有效)。 S3正在触发lambda函数来处理CSV。 Lambda函数然后提供队列,所以它不会1)挂起超过3分钟的Lambda时间限制,2)确保更高效的处理。 – Shanks

+0

没错,如果数据处理可能需要比lambda更长的时间才能运行,那么需要更复杂的处理结构。时间限制是5分钟btw(300秒)不是3分钟,不知道这是否有帮助 – Vorsprung

+0

这正是我想要解决/想出? =) – Shanks

更新(回复this comment):

它没有的Paral任何东西

如果您有一个好的想法,可以在一个Lambda的时限内处理多少个元组,

例如,给出以下信息...

  • 原来的CSV包含50000元组
  • 一个LAMBDA可以处理的时限内5000元组。

然后,可以执行处理器 LAMBDA的10并行异步调用与它们中的每一个不同的工作offset


原来的答复:

你可以把它带有两个lambda表达式工作:

  1. 监听
    • S3触发LAMBDA,其唯一的工作就是通过新上传的CSV的s3路径到处理器 Lambda。
  2. 处理器
    • 由所述监听触发的λ。它将需要s3 pathoffset作为参数(其中offset是它应该开始处理的CSV的一行
    • 此Lambda执行CSV行的实际处理,它应该跟踪它当前处理的行和达到拉姆达时间限制之前,它会停下来和同s3 path但新offset调用本身。

所以,基本上,这是一个递归LAMBDA调用本身,直到所有的CSV行是加工

要检查剩余时间,可以在处理程序中的whilefor循环中使用context.getRemainingTimeInMillis()方法(NodeJS)。

+0

谢谢!这是一个有趣的解决方案。在S3中使用临时文件来保持'队列'的位置是合理的。我认为它完成了1)“挂在Lambda的3分钟的时间限制”,但不是“2)以确保更有效的处理”,因为它不会并行任何东西。欣赏它。 – Shanks

+0

@感谢这对你来说是一个很好的锻炼。你如何并行化? – dashmug