首页 文章

AWS无服务器CSV队列到CSV体系结构

提问于
浏览
0

我目前正在使用AWS进行无服务器的CSV处理 . 熟悉EC2和Dynamo . 我确信有更好的方法来构建它,我找不到一种有效的方法来存储数据 . 任何架构建议将不胜感激 .

此流程将采用上载到S3的CSV,处理元组的所有行,并将新的已处理数据CSV输出到S3 .

1)最佳架构是什么,2)在队列完成之前存储数据的最佳位置,直到可以构建CSV

数据流和服务架构:

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

聪明的想法赞赏 .

2 回答

  • 1

    我相信你的事情太复杂了

    当事件发生时,s3可以触发调用lambda函数 . 这是在s3存储桶事件通知中直接设置的

    因此,使用此选项可在另一个存储桶中创建CSV的转换版本

    亚马逊有一个如何在这里做这种事情的例子

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

  • 1

    更新(回复this comment):

    它没有任何并行化

    如果您已经知道单个Lambda在其时间限制内可以处理多少元组,则可以平均分配任务 .

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

    • 原始CSV包含50,000个元组

    • 单个Lambda可以在时间限制内处理5000个元组 .

    然后,您可以对处理器Lambda执行10次并行异步调用,每个处理器使用不同的 offset .


    原始答案:

    您可以使用两个Lambdas:

    • 听众

    • S3触发的Lambda,其唯一的工作是将新上载的CSV的s3路径传递给Processor Lambda .

    • 处理器

    • 由监听器触发的Lambda . 它将需要 s3 pathoffset 作为参数(其中 offset 是应该开始处理的CSV行) .

    • 此Lambda执行CSV行的实际处理 . 它应该跟踪它当前处理的行,并且在达到Lambda时间限制之前,它将停止并使用相同的 s3 path 调用自身,但是使用新的 offset .

    所以,基本上,它是一个递归的Lambda,在处理所有CSV行之前调用它自己 .

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

相关问题