联运游戏BI分析系统1.0

经过几个月的构建,我们的内部数据BI分析系统几乎接近接近尾声了。本系统实际上是一套生态系统,包组件:

并发计算:
根据业务任务,并发连接游戏Mysql数据库进行SQL运算,并将计算后的数值写入数据集市

数据集市:
数据集市的建立其实是包含在上述的脚本中的,最终形式是以游戏分库,以元键分表,以时间分区,当没有此库/表/分区时,会自动建立

报表系统:
根据数据集市中的数据,通过配置直接生成报表,并以SmartTable的形式进行展现

在讲整个系统前,先来普及一个概念,几乎所有的组件均围绕着它进行,这就是 元键 “ , 英文名我们采用的时Rowkey(我们其实借鉴了Hbase的名词,后续我们也借鉴了其列簇family)

元键 : 一个存在唯一标识的算法或数值,元键的分类如下:

元键这个东西不是很好理解,下面来举几个元键的例子:

单列簇-基础元键:日充值金额,日登账号数,日消费金额 等等

多列簇-基础元键:分商品-日消费金额(列簇为商品),分商品-日消费账号数(列簇为商品)

[单列簇元键/单列簇元键]-单列簇-计算元键:日ARPU(日充值金额/日登账号数)

[多列簇元键/单列簇元键]-多列簇-计算元键:分商品-日消费比重(分商品-日消费金额/日消费金额)

[多列簇元键/多列簇元键]-多列簇-计算元键:分商品-账号平均消费(分商品-日消费金额/分商品-日消费账号数)

数据集市:

基于元键建立的数据仓库,其中按照游戏进行分库,按照元数据进行分表,时间字段进行分区,每条元数据包含下图所示的内容:

1、区组,2、时间,3、渠道,4、列簇,5、数值,6、来路,7、日志ID (PS:顺序也是很有必要的,后续说到)

并发计算:

根据游戏,区组,任务生成相应的任务,并发至每台游戏区组下的数据库进行数据统计,并发计算为连接游戏数据库与数据集市间的桥梁

并发机制为:启动进程池,每条进程为一个游戏1各区组(单数据库),起线程池,每条线程计算单个的SQL任务。

比如上述的一条元数据的最终计算SQL为:

日登陆账号数:

SELECT 渠道, COUNT(DISTINCT account_id) AS v FROM log.account_login WHERE (login_time BETWEEN ‘xxx_date’ AND ‘xxx_date 23:59:59’ OR logout_time BETWEEN ‘xxx_date’ AND ‘xxx_date 23:59:59’) group by 渠道;

然后并发程序会自动补齐:区组,时间,来路,任务ID

如果采集的元数据为带列簇的,则SQL 语句中多Group by一下其列簇列,然后将采集到的数据写入相应的数据集市表中

报表系统:

报表系统及可以通过配置一份报表中的元键,然后填入报表的形式与参数,即可立即展示某各报表

目前我们的报表的前端展示形式为SmartTable

比如我们配置的AUC&PUC报表

我们所采用的SmartTable其实是一各分支,它采用所有的参数均走Ajax来获取,后续可能会将其合并至SmartTable的主干。

最后来补一下整个的物理数据模型: