2013-05-29 54 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

這是非常值得的預處理聚合。