这篇已是本系列文章的第五篇了,上一篇大猪已经介绍 PV/UV 的实现方式以及程序的计算逻辑,本篇大猪继续为小伙伴介绍 留存 ,看在Spark+Hbase的架构中究竟是怎么实现这种指标的。git
大猪 的习惯就是能上图就尽可能不BB,好的图是会说话的,大猪 也在努力实现中。github
详细分析过程算法
大猪25经过某篇文章注册了简书账号,26去浪去了。架构
27再次登陆简书,小伙伴猜猜是哪天的几日留存?函数
这么简单的问题,咱们的小伙伴确定能答得上来。性能
答案就是:25号的2日留存设计
啊?大猪 我怎么答得不对呀3d
莫慌,你们看看当前的时间是28号,Spark+Hbase 计算的是03-27的数据,由于在27号这天只有大猪一我的访问,因此数据只能+1,再看下张图。cdn
大猪 此次我看懂,是21号的7日留存跟25号的3日留存 我就说小伙伴是聪明的,这仍是比较容易理解的。blog
接下来,咱们看看如何将留存转成算法去实现,咱们会尽可能设计成SQL形式去实现。
大猪已经把留存表给设计好了,想必小伙伴跟大猪的设计也是同样的,毕竟都是志同道合的小伙伴。
到这里咱们就须要一张用户表了,须要记录用户的注册时间等信息,后面的不少指标也会使用到,Hbase的用户创表语句以下:
Spark 计算注册用户并写入用户表的指标计算须要放在全部指标的前面 算法以下,有点黄黄的框框是批量写入。
咱们接下来看Come具体的指标计算是如何计算的
因为涉及到了用户表,其实就是在UV去重的基础上添加用户注册时间这个字段:
大猪 这就一一讲这三个框的意思,第一个框在上一篇的 PV/UV 的指标已经讲解过了,就是标记用户的。
第二个框,跟第一个框逻辑差很少,就是批量去查用户注册时间的。
第三个框,就是把第一个框跟第二框的数据合并在一块儿,把注册时间合并进去,这样每条数据都有注册时间,下面就能够用SQL来计算留存了。
眼尖的小伙伴一看就看到了留存的核心算法了吧,就是圈黄色框框的地方。
怎么那么多函数?又有SUM、IF、date_add,这样的技巧小伙伴们要记住,由于在之后的指标计算当中会常用到,大猪 来解释一下它们的含义:date_add函数就是日期+N天,IF就简单啦,判断恰好知足对应的留存日期就将数据SUM到对应的come留存。
为何要这么写?由于这样Spark就可使用一个job计算完全部留存指标,小伙伴们须要细细品尝一下才有感受,若是不这么写,小伙伴们以为怎么写?大猪 之前是一个留存写一个SQL,是否是颇有问题?
下篇文章咱们继续介绍其它有意思指标的算法。
本次源码传送门 => 留存计算源码