2013-05-29 55 views
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,但语言无关紧要,我只是对任何已经构思的框架/包装(使用任何语言)感兴趣。

回答

1

我会研究这种工作的OLAP /多维数据集。

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

的想法是,用一个立方体,你可以设置预处理聚合,然后运行它们,之后的结果,可以快速查询。

MDX语言相当于用于多维数据集的SQL - 它具有相当陡峭的学习曲线 - 但一些基本的东西应该很容易处理。

需要一点阅读才能掌握一般的立方体速度。退房时间:http://en.wikipedia.org/wiki/OLAP_cube

这是非常值得的预处理聚合。