java数据服务_网站数据统计服务(一),架构

统计服务对业务数据进行迁移,分析。

外部迁移:

业务数据存储于Mysql中,Mysql存储的数据会进行垂直,水平切分,业务数据会存在于多个mysql表中,数据分散使得分析程序写起来头大。并且mysql的单表存储量有限,扩展起来也不容易,要定期做数据迁移。于是我们将mysql中的数据定时地迁移到mongoDB中,并清理mysql中的数据。

外部迁移的程序是通用的:全量迁移,增量迁移(insert,update)。迁移时是并发迁移的,可以根据业务ID或者时间分片。比如一个表中主要的操作是insert,这时他时间段内(上次迁移的结束时间到这次迁移的时间)ID基本是连续增长的,所以按ID分批,而某个表中的lastModifiedTime基本是连续的,这时我们按时间分批。

外部迁移将Mysql多个表中的数据迁移到mongoDB的一个collection中。同时支持进行一些数据格式的转换,但基本保证数据的原样性。

311a75e9e7111e210be02e2cd513bacc.png

内部迁移

内部迁移是对原始数据进行初步的整理,并临时存储到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就可以了。

d1c84a8a54207a2c6b128c049c0a7b50.png

分析

分析程序我们也建议通过配置统计出来,也支持plugin的分析程序analyzer。

select sum(columna), count(columnb)

查询总数和个数

select columna,columnb from collectionB orderby columnc limit 30

查询值最大的30条数据

CMS和排行服务可以通过统计服务直接查询到感兴趣的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值