用于聚合时间序列数据并将结果存储到 DynamoDB 的最佳大数据解决方案

Optimal Big Data solution for aggregating time-series data and storing results to DynamoDB

我正在研究不同的大数据解决方案,但未能找到明确的答案或文档来说明什么是最佳方法,frameworks/services 可用于解决我的大数据用例。

我的用例:

我提出的解决方案:

我的问题:

  1. Redshift 是这里最好的存储选择吗?我也在考虑使用 S3 作为存储并使用 Glue 作业直接从 S3 查询数据,尽管我喜欢完全托管的数据仓库的想法。
  2. 由于我们的数据有 30 天的固定保留期,AWS 文档:https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-time-series-tables.html 建议使用时间序列 tables 和 运行ning DROP TABLE在需要删除的旧数据上。是否有其他方法(在 Redshift 之外)可以使数据生命周期管理更容易?进行暂存 table,创建并加载到新的时间序列 tables,删除旧的时间序列 tables,更新视图以包含新的时间序列 table 而不是被丢弃的那个可能容易出错。
  3. 查找自上次聚合以来国家/地区代码发生​​变化的行(customerId/deviceId 组合)的最佳方法是什么?我在想 Glue 作业可以从之前的 运行s 聚合结果 S3 文件创建一个 table,并从当前 运行s 聚合结果 S3 文件创建另一个 table,运行 FULL OUTER JOIN 的一些变体,用于查找具有不同国家/地区代码的行。这里有没有我不知道的更好的方法?

我是大数据和大数据解决方案方面的新手,因此欢迎任何和所有意见!

tldr:使用步进函数,而不是 Glue。将 Redshift Spectrum 与 S3 中的数据结合使用。否则你的整体结构看起来正轨。

恕我直言,您走在正确的轨道上,但有一些地方可以做得更好。 Redshift 非常适合筛选大量数据并对其进行分析。但是,如果您所做的只是构建要加载到 DDB 中的聚合,我不确定是否要将数据复制到 Redshift 中。您是否正在完成其他分析工作负载以证明将数据存储在 Redshift 中是合理的?在暂存 table 和时间序列事件 table 之间是否进行了大量转换?如果不是,您可能希望将时间序列 tables 设为外部 - 使用 Redshift Spectrum 直接从 S3 读取。这可能是一个巨大的胜利,因为初始数据分组和聚合是在 S3 的 Spectrum 层中完成的。这样就不必移动原始数据。

接下来,我建议不要使用 Glue,除非您有无法在其他地方轻松完成的需求(转换)。我发现 Glue 需要一些专业知识才能做你想做的事,听起来你只是将它用于数据移动协调器。如果这种印象是正确的,那么使用阶跃函数甚至数据管道会更好。 (我浪费了太多时间试图让 Glue 做一些简单的事情。它是一个强大的工具,但要确保你会从花在它上面的时间中获得价值。)

如果您只使用 Redshift 进行这些聚合,并且您选择上面的 Spectrum 路线,您将希望获得尽可能小的集群。 Redshift 可能很贵,如果您不使用它的功能,则不符合成本效益。在这种情况下,您可以 运行 仅根据需要创建集群,但 Redshift 启动时间并不快,而且最小的集群也不贵。所以这是一种可能性,但只有在适当的情况下。根据聚合的难度,您可能需要查看 Athena。如果您只是 运行每小时进行一些聚合查询,那么这可能是最具成本效益的方法。

检查过去一小时的聚合只是将新聚合与 S3 中的旧聚合进行比较。使用 Redshift Spectrum 或 Athena 可以轻松完成此操作,因为它们可以将文件(或文件集)作为 table 的源。然后就是 运行查询。

在我看来,Glue 是一种可以进行高功率转换的 ETL 工具。它可以做很多事情,但不是我的第一(或第二)选择。它很敏感,需要大量配置才能完成比基础更多的工作,并且需要许多数据组不具备的专业知识。如果您是 Glue 专家,请自我淘汰;如果没有,我会避免。

至于数据管理,是的,您不想在 Redshift 中从 table 开头删除大量行。它创建了大量的数据重组工作。因此,将数据存储在“月”tables 中并使用视图是进入 Redshift 的正确方法。删除 tables 不会创建此内务处理。也就是说,如果您将 S3 中的数据组织在“月份”文件夹中,那么不需要删除几个月的数据就可以删除这些文件夹。

至于查找不断变化的国家/地区代码,这在 SQL 中应该很容易做到。由于您正在将聚合数据与聚合数据进行比较,因此这也不应该很昂贵。同样,Redshift Spectrum 或 Athena 是允许您对 S3 数据执行此操作的工具。

作为一个大数据新手,不用担心,我们都是从那里开始的。与其他领域的最大区别在于以最少的次数移动数据是多么重要。当您说“Redshift 是这里最好的存储选择吗?”时,您似乎理解了这一点。您似乎认识到数据所在位置对目标计算元素的重要性。如果您需要 Redshift 的强大功能并且将一遍又一遍地访问数据,那么 Redshift 是最佳选择 - 数据一次移动到分析需要 运行 的地方。然而,Redshift 是一种昂贵的存储解决方案——这不是它的本意。 Redshift Spectrum 非常有趣,因为数据的初始聚合是在 S3 中完成的,并且大量减少的部分结果被发送到 Redshift 以完成。 S3 是一种便宜得多的存储解决方案,如果您的工作负载可以与 Spectrum 的功能进行模式匹配,那么这将是一个明显的赢家。

我想明确一点,您只描述了您需要解决方案的领域,我假设您对在相同数据上运行的 Redshift 集群没有其他需求。这将改变优化点。