【发布时间】:2022-01-05 10:17:57
【问题描述】:
我正在开发一个 POC,其中我们有数百万个现有的 S3 压缩 json 文件(未压缩的 3+ MB,带有嵌套对象和数组),并且每隔几分钟就会添加更多文件。我们需要在未压缩数据(基于每个文件)之上执行计算并将其存储到数据库表中,然后我们可以在其中执行一些列操作。我在网上找到的最常见的解决方案是
S3 (Add/update event notification) => SQS (main queue => dlq queue) <=> AWS lambda
我们为所有成功加载的 S3 存储桶键名创建了一个数据库表,因此我可以查询该表并使用 AWS 开发工具包 Node.js 包将消息发送到 SQS 主队列。对于新添加/更新的文件,S3 事件通知会处理它。
我认为上述架构适用于我的情况,但我应该考虑其他任何 AWS 服务吗?
我查看了 AWS Athena,它可以读取我的压缩文件并给我原始输出,但由于我有大型嵌套对象和数组,我需要在其上执行计算,我不确定编写这样的文件是否理想SQL 中的复杂逻辑。
我真的很感激这里的一些指导。
【问题讨论】:
-
在不了解输入或输出数据的结构的情况下,如果您需要近乎实时的数据库中的数据,这似乎是一种合理的方法。 SQS 有一个 Lambda 触发器,它允许对 Lambda 的请求进行批处理(最多 10 个),这样有助于减少您尝试预先处理所有遗留数据时可能达到的 Lambda 并发限制。另一种选择可能是使用 AWS Glue,但是,如果您每天(例如)一次批处理数据,而不是在数据到达时连续处理它,这更合适。取决于您的用例。
-
谢谢@Norman。有效负载结构类似于
{ "id": 1, "caseNumber": 1234567890, "accountNumber": 0987654321, "equipmentsUsage": "<Array of objects>", "logs": "<Array of objects>" }我们将对 equipmentsUsage 内的所有对象(最多 50 个对象)以及 logs 内的所有对象(最多 5000 个)执行计算.输出将是一个包含少量键值对的对象,我们将其添加到数据库中。 -
数据是否需要(近)实时出现在目的地?
-
@Norman 不,我们不会立即为用户寻找(接近)实时数据,而是希望在用户几分钟后回来时准备好数据。此外,我们可能会向用户发送通知,告知他们的数据指标已准备好接受审核。
标签: amazon-web-services amazon-s3 aws-lambda amazon-sqs amazon-athena