我目前正在使用AWS进行无服务器的CSV处理。熟悉EC2和Dynamo。我确信有更好的方法来构建它,我找不到一种有效的方法来存储数据。任何架构建议将不胜感激。
此流程将采用上传到S3的CSV,处理元组的所有行,并将新处理的数据CSV输出到S3。
什么是1)最佳架构和2)在队列完成之前存储数据的最佳位置,直到可以构建CSV
数据流和服务架构:
CSV(包含元组)(S3) - > CSV处理(Lambda) - >队列(SNS) - >队列处理(Lambda) - > ?????在写入CSV之前已经处理的队列项的临时存储???? (这里有什么用?) - > CSV构建(Lambda) - > CSV存储(S3)
聪明的想法赞赏。
答案 0 :(得分:1)
我相信你的事情过于复杂
s3可以在事件发生时触发调用lambda函数。这是直接在s3存储桶事件通知中设置的
因此,请使用此功能在另一个存储桶中制作CSV的转换版本
亚马逊有一个如何在这里做这类事情的例子
http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html
答案 1 :(得分:1)
更新(回复this comment):
它没有任何并行化
如果你很清楚单个Lambda在其时间限制内可以处理多少个元组,你可以平均分配任务。
例如,给出以下信息......
然后,您可以对处理器 Lambda进行10次并行异步调用,每次调用使用不同的offset
。
原始答案:
你可以使用两个Lambdas:
s3 path
和offset
作为参数(其中offset
是应该开始处理的CSV行。s3 path
调用自身,但使用新的offset
。所以,基本上,它是一个递归的Lambda,在处理所有CSV行之前调用它。
要检查剩余时间,您可以在处理程序的context.getRemainingTimeInMillis()
或while
循环中使用for
方法(NodeJS)。