在 AWS 上生成有关数据量的高效快速报告
Posted
技术标签:
【中文标题】在 AWS 上生成有关数据量的高效快速报告【英文标题】:Generating efficient fast reports on amounts of data on AWS 【发布时间】:2014-03-07 12:34:09 【问题描述】:我真的很困惑如何或使用什么 AWS 服务来处理我的案例。
我有一个存储用户交互事件的网络应用程序。目前,这些事件存储在 RDS 表中。每个事件包含大约 6 个字段,如时间戳、事件类型、用户 ID、页面 ID 等。目前我在每个帐户架构上都有数百万条事件记录。当我尝试使用这些原始数据生成报告时 - 报告非常慢,因为我在很长一段时间内执行复杂的聚合查询。在 RDS 上生成一份 30 天的报告可能需要 4 分钟。
有什么方法可以让这些报告运行得更快吗?我正在考虑将事件存储在 DynamoDB 上,但我无法对数据运行如此复杂的查询,也无法进行任何基于属性的排序。
有没有很好的服务组合来实现这一点?也许使用 RedShift、EMP、Kinesis?
【问题讨论】:
包含一些您在 RS 上尝试的示例查询可能也有用吗?我正在做类似的事情,发现我从以前的数据库(在我的情况下是 mysql)中的查询运行得相当慢,直到重新写入和数据重新分区。对我来说,超过 100M 行的聚合在我们的集群上大约需要 10 秒。也许你不需要搬走。 我在聚合上运行聚合。例如 - 每个交互记录都包含以下字段:会话、类型、时间戳、产品。首先,我选择类型=N 且时间戳介于 T1 和 T2 之间的所有记录,然后按会话和产品进行聚合和分组。然后我再次将结果汇总为具体的比较条件。查询非常繁重。 【参考方案1】:我认为 Redshift 是您的解决方案。
我正在使用一个每天生成大约 2.000.000 行新行的数据集,并且我对它进行了非常复杂的操作。您可以提前使用 Redshift 排序键,并按日期对数据进行排序。
此外,如果您使用复杂的聚合函数,我真的建议您对所有信息进行非规范化并将其插入到一个包含所有数据的表中。 Redshift 使用非常高效的自动列压缩,您不会遇到数据集大小的问题。
【讨论】:
感谢 Iñaki 的回答。我阅读了一些有关 Amazon RedShift 的信息,我注意到这是一个非常有效的工具,可用于对大量数据进行复杂查询。问题是定价。我每天在 DynamoDB 上收集大约 100 万个新数据项。每天都在一张新桌子上。如果我每天对 RedShift 表执行附加操作,我最终会在 RedShift 上获得大量数据,这非常昂贵。 你好Forepick。如果我是你,我会试一试。将所有数据加载到其中,看看它有多大。您会感到惊讶,因为如果您的数据具有包含大量类似信息(例如事件)的列,那么压缩效果非常好。一个 0.5Gb 的 csv 统计文件可能只使用 30 或 50mb 的存储空间。您只需支付一两个小时的红移即可对其进行测试。 谢谢伊纳基!您建议在插入 Redshift 之前对数据进行非规范化;这很常见吗?我会认为因为 redshift 非常高效,我们可以在 Redshift 中运行复杂的 JOIN 查询来进行非规范化。 (我试图弄清楚在将这些 CSV 加载到 Redshift 之前,对表示关系数据库表的 CSV 执行转换步骤是否很常见,您的评论表明这是复杂关系的常见做法。)谢谢!【参考方案2】:对于此类问题,我通常的解决方案是使用一组例程将聚合结果汇总并存储到其他 RDS 表中的各个级别。您存储的此事务信息一旦记录就不太可能更改,因此,例如,如果您发现自己每天/每周/每月运行各种数据切片的汇总,请运行查询并存储这些结果,不一定在最后您将需要的级别,但在显着减少进入这些最终汇总的行数的级别。例如,有一个每天汇总事件类型、用户 ID 和 pageId 的表格,而不是每个事件一行(或每小时一行而不是一天) - 您需要找出最合乎逻辑的汇总,但是您明白了 - 目标是在可以减少原始数据量的级别上进行预先汇总,但仍然为您提供足够的灵活性来提供报告。
只要保留它,您始终可以返回到粒度/事务性数据,但每次要使用数据时不断计算相同的结果并没有什么好处。
【讨论】:
是的,存储中间结果以加速最终结果是要走的路! 感谢 E.J 的详细回答。好吧,就我而言,恐怕保存聚合将更具挑战性。让我描述一下这个案例。我的应用程序让客户可以管理在线商店。我的一些客户在他们的帐户上有大约百万注册产品,以及大量的用户交互,每月大约 5000 万!如果我保存每个产品每个帐户的每日汇总(如果在选定日期之间生成报告,我必须这样做),我最终会每天为大客户创建 100 万条新记录!这将立即阻塞我的 RDS 实例!以上是关于在 AWS 上生成有关数据量的高效快速报告的主要内容,如果未能解决你的问题,请参考以下文章
在 Excel 上生成报告并提高性能的最佳技术/数据库? [关闭]