統計服務對業務數據進行遷移,分析。
外部遷移:
業務數據存儲于Mysql中,Mysql存儲的數據會進行垂直,水平切分,業務數據會存在于多個mysql表中,數據分散使得分析程序寫起來頭大。并且mysql的單表存儲量有限,擴展起來也不容易,要定期做數據遷移。于是我們將mysql中的數據定時地遷移到mongoDB中,并清理mysql中的數據。
外部遷移的程序是通用的:全量遷移,增量遷移(insert,update)。遷移時是并發遷移的,可以根據業務ID或者時間分片。比如一個表中主要的操作是insert,這時他時間段內(上次遷移的結束時間到這次遷移的時間)ID基本是連續增長的,所以按ID分批,而某個表中的lastModifiedTime基本是連續的,這時我們按時間分批。
外部遷移將Mysql多個表中的數據遷移到mongoDB的一個collection中。同時支持進行一些數據格式的轉換,但基本保證數據的原樣性。

內部遷移
內部遷移是對原始數據進行初步的整理,并臨時存儲到mongoDB的collection中。在統計完畢后清理臨時表。
我們另外還開發了mongoDB查詢表達式和Java DSL,查詢表達式還支持用戶自定義函數,內部遷移只需要做簡單的配置,類似于SQL.
select max(column) as max, count(column), min(column) from collection where columnc=”” and column b=””
求最大值,最小值,可以用來分批并發處理。
select userFunction(columnd), * from collectionA where columna=”” and columnb=”” group by columna into collectionB values set(columnb), sum(columnc), count(columna)
將columnd的數據格式化后upsert到collectionB中
sum是對columnc求和
count是對columna求個數
內部遷移后的臨時數據可以用來外部排重。比如求人數(非次數)可以group by后求count就可以了。

分析
分析程序我們也建議通過配置統計出來,也支持plugin的分析程序analyzer。
select sum(columna), count(columnb)
查詢總數和個數
select columna,columnb from collectionB orderby columnc limit 30
查詢值最大的30條數據
CMS和排行服務可以通過統計服務直接查詢到感興趣的數據。