手游数据分析标准LOG库

经过半年的系统开发与数据分析,目前最为复杂的地方就是在游戏研发方记录的LOG日志上,每个CP团队的日志记录方式,时间点均有所差异,而面对产品所需要的数据我们只能逐一进行分析,而且尤其是时间点问题导致数据计算异常的事情时有发生,鉴于以上的问题进过多部分游戏的分析最终产出一套基于我们开发的系统的标准LOG库,并且逐步的与新接入研发方沟通,在数据记录/时间点上以此作为规范。
以下的数据基本上囊括了我们的产品所需要计算的所有数值,也几乎容纳了网上对于游戏运营所需要的基础数值。

结构简述

手游日志库包含两部分,
1、 中心数据库(ucenter),所有的游戏公用的数据库,存储未分区服前的数据,
2、 独立游戏库(ugame),每区服一个,存储已区分区服的游戏数据
以上日志型数据库可与游戏逻辑数据库建立在同一实例中,日志库均以时间为分区

数据流

日志库中存储的均为日志型数据,下图标注的为写入的时间点

特别注意:

数据我们将采用ETL采集方式从游戏数据库中采集至联运数据仓库,并经由后期计算产生相应报表。为保证ETL采集数据准确性,对数据写入方式存在部分要求。
1、区服ID请设置可由运维人员继续配置
2、数据必须以时间顺序写入,例如:不能先写入2014-12-31 23:50:50 数据再写入其之前数据,否则会造成采集数据丢失
3、数据写入需保证时效性,数据需在5分钟之内写入,例如:不能在当前时间为14:05分后写入14:00之前数据,否则可能造成报表数据不准确
4、数据表中,除login_log,sence_log中类型使用数字替代,其余类型均使用汉字记录包含:

  • a) 消费类型
  • b) 消费名称
  • c) 玩法类型
  • d) 玩法分类
    e) 玩法名称

数据结构

中心库(ucenter)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*start_log*/
CREATE TABLE `start_log` (
` channel`   varchar(64)  NOT NULL COMMENT  '渠道',
`s_type`  INT(11NOT NULL COMMENT '状态(1登陆,0登出)',
`client_model`  varchar(20NOT NULL COMMENT '手机型号',
` imei `  varchar(100NOT NULL COMMENT '移动设备识别码',
`ifa`    varchar(100)  NOT NULL COMMENT '广告识别码',
`ifv`     varchar(100)  NOT NULL COMMENT '供应商识别码',
`mac`   varchar(100NOT NULL COMMENT 'MAC地址',
`online_sec  ` INT(11NOT NULL COMMENT '时长',
`create_time`  datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='游戏启动表';
/*用户点击Icon时记录数据*/
/*login_log*/
CREATE TABLE `login_log` (
`channel`     VARCHAR(30)  NOT NULL COMMENT '渠道',
`account_id`  VARCHAR(30)  NOT NULL COMMENT '账号ID',
`l_type`  INT(11)  NOT NULL COMMENT '状态(1登陆,0登出)',
`online_sec  ` INT(11)  NOT NULL COMMENT '时长',
`create_time`  DATETIME NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='账号(登陆/登出)表';
/*用户输入账号密码后与服务器建立连接后记录,用户退出时记录*/

游戏库(ugame)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*enter_log*/
CREATE TABLE `enter_log` (
`channel`    VARCHAR(30)  NOT NULL COMMENT '渠道',
`account_id`  VARCHAR(30) NOT NULL COMMENT '账号ID',
`e_type`  INT(11) NOT NULL COMMENT '状态(1登陆,0登出)',
`online_sec`  INT(11) NOT NULL COMMENT '时长',
`create_time`  DATETIME NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='区服(登陆/登出)表';
/*用户选择区服后进入角色选择页面时记录,用户退出时记录*/
/*sence_log*/
CREATE TABLE `scence_log` (
`channel` varchar(64)  NOT NULL COMMENT '渠道',
`account_id` varchar(32)  NOT NULL COMMENT '账号ID',
`role_id` varchar(32)  NOT NULL COMMENT '角色ID',
`role_lv` int(11NOT NULL COMMENT '角色等级',
`s_type` int(11NOT NULL COMMENT '状态(1登陆,0登出)',
`online_sec` int(11NOT NULL COMMENT '时长',
`create_time` datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='场景(登陆/登出)表';
/*用户选择完角色进入场景时记录,角色退出时记录*/
/*online_log*/
CREATE TABLE `online_log` (
`channel` varchar(64NOT NULL COMMENT '渠道',
`account_id` varchar(32NOT NULL COMMENT '账号ID',
`create_time` datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='在线日志表';
/*在线用户每5分钟记录(可设置每用户一个时钟,5分钟倒计时记录,或每5分钟统一记录) */
/*level_log*/
CREATE TABLE `level_log` (
`channel` varchar(64NOT NULL COMMENT '渠道',
`account_id` varchar(100NOT NULL COMMENT '账号ID',
`role_id` varchar(100NOT NULL COMMENT '角色ID',
`role_lv` int(11NOT NULL COMMENT '角色等级',
`create_time` datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色升级表';
/*角色升级表,角色升级时记录 */
/*credit_log*/
CREATE TABLE `credit_log` (
`channel` varchar(64NOT NULL COMMENT '渠道',
`account_id` varchar(32NOT NULL COMMENT '账号ID',
`role_id` varchar(32NOT NULL COMMENT '角色ID',
`role_lv` int(11NOT NULL COMMENT '角色等级',
`money` int(11NOT NULL COMMENT '人民币',
`order_no` varchar(100NOT NULL COMMENT '订单号',
`create_time` datetime NOT NULL COMMENT '日志时间(订单成功时间)',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='充值日志表';
/* 充值表,用户充值成功后记录 */
/*cost_xxx_log*/
CREATE TABLE ` cost_xxx_log ` (
`channel` varchar(64NOT NULL COMMENT '渠道',
`account_id` varchar(32NOT NULL COMMENT '账号ID',
`role_id` varchar(32NOT NULL COMMENT '角色ID',
`role_lv` int(11NOT NULL COMMENT '角色级别',
`cost_name` varchar(100NOT NULL COMMENT '消费名称(中文)',
`money` int(11NOT NULL COMMENT '消费金额',
`create_time` datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='游戏xxx消费表';
/* xxx消费表,当角色成功进行消费时记录 */
/*play_xxx_log*/
CREATE TABLE ` play_xxx_log ` (
`channel` varchar(64NOT NULL COMMENT '渠道',
`account_id` varchar(32NOT NULL COMMENT '账号ID',
`role_id` varchar(32NOT NULL COMMENT '角色ID',
`role_lv` int(11NOT NULL COMMENT '角色等级
`t_name` varchar(100) NOT NULL COMMENT '名称(中文)',
`op_type` int(11) NOT NULL COMMENT '状态(1进入,2成功,3失败)',
`use_time` int(11) NOT NULL COMMENT '耗时(s)',
`create_time` datetime NOT NULL COMMENT '日志时间',
KEY `index_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='游戏xxx表';
/* 游戏xxx玩法表,当进入/完成成功/完成失败某项玩法时记录 */