0

我有一个传入消息的大型数据集,我想做的是为每个消息所有者提供汇总统计信息,例如每天、每周、过去两周和每年的消息率。聚合可以很简单,例如字数统计,也可以更复杂,例如使用的关键字……无论哪种方式,我都想以一种有组织的方式预先计算并存储这些聚合,以便当我执行以下操作时:

Person.word_count_last_10_days

-- 这个查询不是在整个消息存档数据库上运行,而是从预先计算的聚合表中提取......类似于:

SELECT SUM(value) from aggregations
WHERE 
     category = "word_count" AND 
     timeframe = "day" AND date > "2013-05-18" AND date < "2013-05-28" AND 
     person_id = 42
GROUP BY person_id

更大时间范围的聚合,例如“年”,将简单地计算构成该年的所有天数。

总体目标是将分析浏览与海量消息存档分离。在大多数情况下,如果聚合表包含所需的所有数据,分析系统没有理由实际查询消息存档。

这让我觉得这是一个非常常见的用例......它是通过 Hadoop 完成还是通过非并行处理完成......所以我想知道是否已经有一个框架/包装器/设计方法提供了一些约定为此,而不是完全从头开始写一个?我正在使用 Ruby,但语言并不重要,我只对已经构想的任何框架/包装器(任何语言)感兴趣。

4

1 回答 1

1

我会研究这种工作的 OLAP/立方体。

这是一个开源 OLAP 服务器: http: //mondrian.pentaho.com/

这个想法是,您可以使用多维数据集设置预处理聚合,然后运行它们,然后可以快速查询结果。

MDX 语言相当于多维数据集的 SQL——它的学习曲线相当陡峭——但一些基本的东西应该很容易开箱即用。

一般来说,需要阅读一些内容才能快速了解立方体。查看:http ://en.wikipedia.org/wiki/OLAP_cube 。

对于预处理聚合来说,这是非常值得的。

于 2013-05-29T16:13:23.360 回答