助力游戏运营数据分析
1. 开通RDS服务
登录RDS控制台,购买RDS实例。
创建账号。
创建数据库。本案例创建的RDS数据库为gamedb。
登录数据库。如果是首次登录,需要设置白名单。
创建用于存储游戏业务中用户登录、注册等数据信息表。本案例创建表login_log。
CREATE TABLE `login_log` ( `id` bigint(22) unsigned NOT NULL AUTO_INCREMENT, `uid` varchar(20) NOT NULL, `channel_id` int(11) NOT NULL, `channel_uid` varchar(50) NOT NULL, `timestamp` bigint(22) NOT NULL, `type` int(11) NOT NULL, `platform` tinyint(2) NOT NULL DEFAULT '1', `deviceId` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_timestamp` (`timestamp`), KEY `idx_uid` (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
模拟生成写入表的数据。可多次执行以下SQL语句。
drop procedure if exists tpInsert; DELIMITER // create procedure tpInsert() begin declare i int ; set i=0; -- - while(i< rand() * 100) do insert into `login_log`(`uid`, `channel_id`, `channel_uid`, `timestamp`, `type`) select substr(md5(rand()),1,20) as `uid`, case when floor(rand() * 1000)=999 then 6 when floor(rand() * 10)>=8 then 5 else floor(rand() * 5) end as `channel_id` , substr(md5(rand()),1,48) as `channel_uid`, unix_timestamp(DATE_SUB(now(),INTERVAL rand() * 60 DAY)) as `timestamp` , floor(rand() * 10) as `type` ; set i=i+1; select case when date_format(now(), '%H')<=6 then sleep(rand() * 5) when date_format(now(), '%H')<=12 then sleep(rand() * 9) when date_format(now(), '%H')<=18 then sleep(rand() * 7) when date_format(now(), '%H')<=21 then sleep(rand() * 3) when date_format(now(), '%H')<=23 then sleep(rand() * 1) end ; END while; -- - end // DELIMITER ; -- 设置后台任务 drop event if exists second_test_event; create event second_test_event on schedule every 1 second on completion preserve disable do call tpInsert(); -- 开启后台任务 alter event second_test_event enable; # 验证数据写入正常 select count(*) from login_log;
创建用于存储游戏业务中玩家购买道具、皮肤等相关的支付信息数据。本案例创建表pay_order。
CREATE TABLE `pay_order` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `order_id` varchar(255) NOT NULL, `app_id` int(11) NOT NULL, `channel_id` int(11) NOT NULL, `channel_uid` varchar(255) NOT NULL, `product_id` varchar(255) NOT NULL, `product_name` varchar(255) NOT NULL, `uid` varchar(20) NOT NULL, `amount` int(11) NOT NULL , `status` tinyint(4) NOT NULL DEFAULT '0', `pay_time` bigint(20) DEFAULT NULL, `create_time` bigint(20) NOT NULL, `notify_time` bigint(20) DEFAULT NULL, `deviceId` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
2. 开通AnalyticDB服务
购买AnalyticDB MySQL版实例。
创建数据库账号。
单击进入用于本案例的实例。单击登录数据库。
创建日志数据表。本案例创建表为domain_log。建表语句如下:
Create Table `domain_log` ( `pkid` varchar COMMENT '', `uid` varchar COMMENT '', `ts` bigint COMMENT '', `channel_id` tinyint COMMENT '', `message` varchar COMMENT '', `message_body` varchar COMMENT '', `ts_date` bigint COMMENT '', `uxapx` int COMMENT '', `uylvly` int COMMENT '', `uzexpz` bigint COMMENT '', `uagolda` bigint COMMENT '', `ubcrysab` int COMMENT '', `uccrysic` int COMMENT '', `uddshd` bigint COMMENT '', `uesopte` bigint COMMENT '', `ufprogf` bigint COMMENT '', `ugmsprogg` varchar COMMENT '', `umplat` tinyint COMMENT '', `ummigm` bigint COMMENT '', `uimcidi` varchar COMMENT '', `version` bigint COMMENT '', primary key (pkid,ts_date) ) DISTRIBUTE BY HASH(`pkid`,`ts_date`) INDEX_ALL='Y' COMMENT='''' PARTITION BY VALUE(date_format(ts_date, '%Y%m%d')) LIFECYCLE 365 STORAGE_POLICY='MIXED' HOT_PARTITION_COUNT=90;
3. 配置数据同步链路
购买DTS实例。创建同步作业。
配置DTS数据同步链路。源实例选择MySQL,目标实例选择AnalyticDB MySQL版。
选择用于本案例的待同步表,如下图:
定义在AnalyticDB中表的分布列以及主键列,并且启动数据同步,如下图所示:
说明:游戏业务里面往往所有的分析维度均以玩家为维度,故为了保证在数据库里面分析查询的高效性,一般可以选择玩家ID为分布键。
启动DTS预检查,预检查通过后正式开始数据实时同步,如下图所示:
4. 部署ECS-SLS数据采集
登录SLS控制台。创建日志服务Project,如下图所示:
创建日志服务Logstore,如下图所示:
配置数据接入,这次以游戏日志场景最常见的JSON格式为例,如下图所示:
创建机器组,进行JSON日志数据采集,安装Logtail采集客户端,如下图所示:
单击并且安装Logtail客户端,并且确保正常运行,如下图所示:
勾选本案例所用的ECS实例,单击安装,然后确认安装完毕。
往往产生日志数据的ECS服务器有多个,常常会把它加入到一个组内进行管理,创建机器组,如下图所示:
添加机器组,如下图所示:
添加机器组后,一定要检查一下Logtail心跳是否正常,如下图所示:
配置logtail进行日志数据采集,这里主要是需要正确配置日志文件的路径名称,如下图所示:
查询分析配置,这一步是SLS自身的分析功能,本demo用不到,但是SLS规定必须要至少选择一种索引,默认下一步即可,如下图所示:
ECS-SLS数据采集配置接入完成,如下图所示:
5. 部署SLS-AnalyticDB数据投递
登录SLS控制台。单击用于本案例的Project。
在数据处理标签页上选择数据导出到AnalyticDB,单击右侧+,选择“直接投递”即可,如下图所示:
说明:如果您是首次将日志数据投递到AnalyticDB MySQL,需要为AnalyticDB MySQL授权,允许AnalyticDB MySQL访问日志服务。
1) 单击AnalyticDB后的+,系统自动提示您进行授权操作,单击权限。
2) 在云资源访问授权页面,单击同意授权,将角色AliyunAnalyticDBAccessingLogRole授予AnalyticDB MySQL。
配置AnalyticDB投递选项,如下图所示:
各参数说明,详见帮助文档:https://help.aliyun.com/document_detail/149689.html。
完成SLS-AnalyticDB投递配置,如下图所示:
6. 游戏数据运营分析举例
本案例通过QuickBI展示通过AnalyticDB MySQL数据源分析的一段时间内的用户活跃趋势。
访问QuickBI控制台。
创建数据源。
选择AnalyticDB for MySQL 3.0。
录入数据库信息:
创建成功后,可以看到数据源的情况:
创建数据集。
输入数据集名字并保存数据集:
创建仪表板。
选择数据集并设定维度/度量:
发布为仪表板,并设定水平轴和垂直轴描述。
查看发布结果。
实验链接:https://developer.aliyun.com/adc/scenario/24ec864e6bff46bcb89b72a14c484259