走自己的路

路漫漫其修远兮,吾将上下而求索

  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 叱咤红人 阅读(2111) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: