走自己的路

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

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

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

           

          外部遷移:

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

           

          外部遷移的程序是通用的:全量遷移,增量遷移(insert,update)。遷移時是并發遷移的,可以根據業務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 columna,columnb from collectionB orderby columnc limit 30

          查詢值最大的30條數據

           

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



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

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


          網站導航:
           
          主站蜘蛛池模板: 郧西县| 大兴区| 达日县| 无极县| 安国市| 昆山市| 古田县| 昌都县| 湘阴县| 宜君县| 舟曲县| 南投市| 昌平区| 北辰区| 潞西市| 和林格尔县| 义马市| 柏乡县| 城口县| 东山县| 腾冲县| 晋中市| 舞阳县| 合作市| 成武县| 普格县| 关岭| 扬州市| 红河县| 子洲县| 霍林郭勒市| 新安县| 齐齐哈尔市| 藁城市| 红河县| 会昌县| 连江县| 大同市| 志丹县| 扬州市| 桃园县|