我有一个传入消息的大型数据集,我想做的是为每个消息所有者提供汇总统计信息,例如每天、每周、过去两周和每年的消息率。聚合可以很简单,例如字数统计,也可以更复杂,例如使用的关键字……无论哪种方式,我都想以一种有组织的方式预先计算并存储这些聚合,以便当我执行以下操作时:
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,但语言并不重要,我只对已经构想的任何框架/包装器(任何语言)感兴趣。