【问题标题】:How to create a backend for displaying large datasets in a web frontend如何创建用于在 Web 前端显示大型数据集的后端
【发布时间】:2020-03-13 10:03:45
【问题描述】:

在存储在 aws s3 中的镶木地板文件中,我有很多时间序列相关数据以一小时的间隔分块(每小时一个文件)。目的是让 Web 应用程序显示该数据。由于我们无法根据要求抓取 s3 上的每个镶木地板,因此我的方法是使用 ETL 流程来聚合这些系列并将它们存储为单个镶木地板并存储在 dynamodb 表中以获取不同的聚合视图,例如年、月、周、日、小时,甚至分钟。此外,处理过的镶木地板可以通过 aws athena 进行查询(不是从前端,因为我希望等待很长时间才能执行查询)

【问题讨论】:

    标签: amazon-s3 aws-lambda parquet aws-glue amazon-athena


    【解决方案1】:

    听起来是一个合理的计划。我假设您想要一些关于如何实现这一目标的指针?

    根据您当前数据集的大小以及您使用 Athena 查询数据集的要求,您可能不需要执行 ETL。

    您可以设置一个表,其位置是所有 Parquet 文件的前缀(例如,如果文件使用 s3://example/dir/2020/03/13/12/file.parquet 之类的键存储,则为 s3://example/dir/)。如果您的总数据集不超过几千兆字节,我会推荐这个。如果您的数据集较大,并且它被组织成包含每天或每小时的前缀,您可以创建一个分区表并添加具有使用前缀结构的位置的分区(例如,s3://example/dir/2020/03/13s3://example/dir/2020/03/12 用于每日分区或 @ 987654327@ 和 s3://example/dir/2020/03/13/12` 用于每小时分区)。除非您每天有数百 GB 的数据,或者您将使用 Athena 运行的查询几乎总是只查看几个小时的数据,否则我建议您按日期而不是按小时进行分区,以减少分区数量。

    如果您现有的 Parquet 文件非常小,不到 100 兆字节,并且 Athena 查询的性能非常重要,您可以尝试将文件 ETL 到更大的文件中,看看是否有帮助。它可能会或可能不会,这将取决于。我建议您将 Athena 本身用于 ETL。您可以使用INSERT INTO 根据另一个表中的数据在一个表中创建新分区。我建议通过创建Event Bridge rule with a schedule 来自动执行此操作,该Event Bridge rule with a schedule 触发在 Athena 中运行转换查询的 Lambda 函数,或者如果您想避免为等待查询完成的 Lambda 付费(或需要等待超过 15 分钟)。 AWS 有一项名为 Glue ETL 的服务是为这类事情而设计的,但根据我的经验,这不值得。使用 Athena、Lambda 和 Step Functions 在可用性和灵活性方面胜过它。

    您可以使用相同的机制将预先计算的时间序列加载到 DynamoDB 中 - 使用 Event Bridge 安排在 Athena 中运行查询的 Lambda 函数,并将结果转换为存储在 DynamoDB 中。使用 Step Functions 可避免在等待查询完成时为空闲时间付费。

    如果发布了 Amazon Timestream,它可能是比 DynamoDB 更好的存储时间序列的目标。还可以考虑将预先计算的时间序列作为 JSON、CSV 或 Apache Arrow 存储在 S3 而不是 DynamoDB 上,这可能更便宜,并且在某些方面更简单,具体取决于您的用例。

    如果您想了解有关如何设置分区 Athena 表的更多详细信息,请告诉我,但请提供更多上下文,以便我更具体地说明。

    【讨论】:

    • 感谢您的输入。我们已经有你提到的 s3 结构。我更担心 ETL,我将根据您的想法进一步调查。不幸的是,Timestream 不存在,但 s3 听起来比 dynamo 更好,因为我们可能会在插入预先计算的值时达到限制
    • 我们最终将所有数据加载到 dynamodb 中,因为不需要进一步查询。因此,我们按分钟、小时和天聚合了这些值,并将其添加为哈希键作为后缀 _day 等等。 sortkey 是时间戳,它在前端的表现非常快,因为您可以查询所需的聚合级别。由于 timestream 发布了,我们也可以切换,但我看不到任何好处,因为 dynamodb 非常便宜
    • 感谢@emilio 回过头来告诉我们你的结局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2021-01-07
    • 2021-01-01
    相关资源
    最近更新 更多