最近接到产品一个需求,希望提取下游戏中的某个日期范围内的连续登录用户的数据,具体是对满足某个连续登录条件的用户进行不同的奖励。
在工作中,这个需求此次是第二次遇到了,这是个很普遍的需求场景。初接到这个问题,会有点儿觉得麻烦,要从按天日志里去提取出这个数据,一开始,很容易想到循环法上去,但是要进行连续与否的判断时,想着想着就把自己想晕了。当然最简单的循环法也可以出结果,但是效率会非常低,尤其在时间范围长,日志数据量大的情况下。效率低下肯定得排除。
喜欢借用外力,运用已有的工具,通常是搞运维的人的特质,所以这次在遇到这个需求时,自己想了想能否借鉴下成熟的技术来实现这个需求,当然效率又不能太低呢?然后想到,话说这个世界就是一个映射的世界,关键是找对自己需要的那个映射。
下面进入整体,首先一开始想到的是二进制,因为很容易想到把期间二进制化后,把每个用户每天登录与否,(登录位置置为1,否置为0)用位运算正确的设置进去。但是呢因为自己对shell二进制用法不熟悉所以此种思路打算放弃。
再想其他方法,忽然想到把用户按天登录映射成一个1和0的字符串的话,可以用模式匹配的方法,来高效快速的去完成这个需求。再多说点儿就是可以把去匹配5个1的串,6个1的串等等,这样就可以很容易的得到>=5天的用户情况,>=6天的用户情况等等,然后再辅以各类优化之法,去得到具体连续登录几天的用户数据。
此处只说思路,具体实现之法,相信对于各位大侠来说,都是小菜一碟。记录此文,别无班门弄斧之意,纯粹为交流思路。