用户数据收集的经验与教训

引言

做为一个Geek,没事找事就像本职工作一样。我们的游戏《乱世将神OL》上线数月,仍有很多问题,用户数据也没有达到理想的效果。于是我就着急啊,着急啊,怎么办嗫?玩家为啥都走了嗫?真想直接劫持用户的摄像头,看看这些玩不了几分钟就跑路的家伙都长啥样子!!当然这是不现实的臆想了,不过有一件事情是可以做的,就是收集用户行为数据。现在不都流行大数据分析吗?Hadoop、MongoDB啥的都还木有玩过。于是就想操练一把。其实嗫,我就是个打工得,老板高兴,就给我发钱,不高兴,我就滚蛋鸟,这个事情真不是我的本职工作。但谁让咱蛋疼呢。╮(╯▽╰)╭

BehaviourCollector & SAE

俺们的游戏基于Cocos2d-x引擎,纯C++写的啊,写个界面都差点累死。还好后来升级到2.2版,大家都才放弃了VS2008,和我一起用2012鸟(其实这个时候,2013已经出来鸟,%>_<%),终于可以爽快得用C++11啦,不用再受std::map<blablablabla,blablablabla>::iterator 这种鸟代买的折磨了。还有thread可以用,怎一个爽字了得啊。撸一个BehaviourCollector那是分分钟的事情啊(实际情况是写了几个小时(__) 嘻嘻……)。为了不影响游戏的运行,任何界面收集的数据都会被加到一个队列里(这里就简单用一个vector当队列了),还准备了两个队列,一个store,一个send,这样尽可能得减少因为BehaviourCollector发送数据造成用户界面卡顿,甚至崩溃的几率。Send 当然是要放在一个单独的线程里执行了,再加几把小锁(mutex),一切就搞定了。当然,游戏嘛,不崩溃怎么叫游戏呢?有些崩溃真是你想测试都不知道怎么测,而好心的玩家有有限,所以,我又在BehaviourCollector里加入了 signal handler,如果有崩溃的话,可以根据前面用户的操作来分析崩溃的原因,甚至复现。

然后,脑残的事情就发生了,客户端是简单了,还得有个服务器吧,脑子一热,我就把服务器放到 Sina App Engine 上了。服务器实现起来很简单,使用python+bottle,用了 SAE 的KVDB,几十行代码的事情,服务器就构建起来了。还有免费的IP、PV统计,多爽啊!可是!SAE这个坑爹玩意儿,除了流量死贵死贵的(事后分析,我的80%的钱都花再流量上了,存储其实没几个钱)。贵也就算了,如果能出成果,让公司支付就是了,问题还有这个SAE为了防止单个应用占用过多资源,还引入了一个分钟配额(其实PaaS基本都有这个限制)这导致了,我收集到的数据,需要花两三个小时从KVDB里收集起来,打包成 bz2文件,再下载到本地,再解压,再分析……而如果当时用个VPS的话,这些事情基本不是事儿。这是选择SAE做服务器的一大教训!这货根本不事后做数据收集服务器。

要收集就收集直接可用的数据

脑残的事情办多了,都不好意思见人了。比如我想的直接收集原始数据,在线下做关联处理。例如:用户打开了某个界面、关闭界面、切换后台、切回前台……在我收集的数据里,这些都是单条记录,那么如果我要看某个用户在某个界面的停留时间怎么办?1. 收集用户A所有的打开界面的记录,1.收集用户A所有的关闭界面记录,3.根据时间戳排序,4.计算用户停留时间。这个本来在客户端用几个毫秒就能计算出来的事情,在我这里就要花几十分钟,而且还不一定能找到。所以,如果要统计界面停留时间,那就在客户端计算这个停留时间,再把停留时间发上来,这边做统计分析就好了。

友盟

折腾了一圈,最后的结果是:收集了近10亿条数据,却分析不出了所以然来。你说这个多悲剧!我知道现在有现成的工具可以做这个,比如友盟的数据统计。但那不是还要接入Java吗?要通过JNI调用吗?算了,如果下次再需要做用户行为分析,至少我有这么一点点经验了。让他们接友盟去吧……我的BehaviourCollector关闭了。

posted @ 2014-03-02 16:19  福柯  阅读(511)  评论(0编辑  收藏  举报