走自己的路

          路漫漫其修遠兮,吾將上下而求索

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks

          統計服務對業務數據進行遷移,分析。

           

          外部遷移:

          業務數據存儲于Mysql中,Mysql存儲的數據會進行垂直,水平切分,業務數據會存在于多個mysql表中,數據分散使得分析程序寫起來頭大。并且mysql的單表存儲量有限,擴展起來也不容易,要定期做數據遷移。于是我們將mysql中的數據定時地遷移到mongoDB中,并清理mysql中的數據。

           

          外部遷移的程序是通用的:全量遷移,增量遷移(insertupdate)。遷移時是并發遷移的,可以根據業務ID或者時間分片。比如一個表中主要的操作是insert,這時他時間段內(上次遷移的結束時間到這次遷移的時間)ID基本是連續增長的,所以按ID分批,而某個表中的lastModifiedTime基本是連續的,這時我們按時間分批。

           

          外部遷移將Mysql多個表中的數據遷移到mongoDB的一個collection中。同時支持進行一些數據格式的轉換,但基本保證數據的原樣性。

           


           

           

          內部遷移

          內部遷移是對原始數據進行初步的整理,并臨時存儲到mongoDBcollection中。在統計完畢后清理臨時表。

           

          我們另外還開發了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的數據格式化后upsertcollectionB

          sum是對columnc求和

          count是對columna求個數

           

          內部遷移后的臨時數據可以用來外部排重。比如求人數(非次數)可以group by后求count就可以了。


           

          分析

          分析程序我們也建議通過配置統計出來,也支持plugin的分析程序analyzer

          select sum(columna), count(columnb)

          查詢總數和個數

           

          select columnacolumnb from collectionB orderby columnc limit 30

          查詢值最大的30條數據

           

          CMS和排行服務可以通過統計服務直接查詢到感興趣的數據。



          posted on 2011-04-12 13:33 叱咤紅人 閱讀(2125) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 万载县| 互助| 榆树市| 通榆县| 淳化县| 东光县| 织金县| 榆中县| 乌鲁木齐县| 项城市| 玉山县| 凤山县| 清丰县| 甘南县| 武山县| 青海省| 大渡口区| 禹城市| 乾安县| 呼图壁县| 康马县| 修水县| 长武县| 于都县| 绵竹市| 寻甸| 九台市| 邹城市| 墨竹工卡县| 抚顺县| 宁德市| 岳阳市| 资中县| 景泰县| 峨边| 工布江达县| 三河市| 太保市| 城固县| 曲靖市| 深圳市|