聊聊统计,统计新增用户、活跃用户、留存用户的几个方案

590 阅读3分钟

统计的分类

统计分为新增统计、活跃统计、留存统计

新增统计

首先确认维度

  1. 按设备号统计
  2. 按用户账号统计 两者区别在于用户是否登录。

其次,某些应用会把长时间未登录的用户算作新增用户,如果这样也算新增,需要划分时间范围(30天、90天或者半年),如果不划分时间范围就是仅记录真正新增的用户,数据比前者略少,具体看推广的力度。

新增的计算方法为:

  1. 用户是否新建账号,新建账号必定是新增用户,
  2. 当前用户是否在指定时间段内登陆过,如果未登陆过,算作新用户,
    以上两种情况都会向日志表中插入一条数据,日志表主要记录,用户id、设备号、登陆时间、创建时间、更新时间、删除时间。视乎情况记录用户的手机型号,系统版本和操作系统。
  3. 如果一天中服务器有相对空闲的时间(一般指凌晨),可以选择用脚本在指定时间生成统计数据
  4. 没有相对空闲的时间,可以选择部署clickhouse,经过实战测试,通过clickhouse查询mysql,上亿甚至十亿级的表关联查询都可以轻松抗住。

活跃统计

活跃数的定义是:只要今天登陆过应用,即算活跃。 用户每日第一次打开应用是即上报一条信息到MQ,MQ消费时查询该用户信息在今日是否上包裹,如果上报过,丢弃这条MQ。
活跃数的统计也分为两种情况

  1. 统计当天活跃用户
  2. 统计统计指定日期活跃用户

第一种情况,如果非常要求实时性,可以用服务器的socket连接数来表示即可,
第二种情况也是两套方案

  1. 获取实时数据,
    1.1 通过clickhouse实时查询。
    1.2 用服务器的socket连接数表示当前活跃用户数,误差在3%左右(因为存在连接断开尝试重连的情况。)
  2. 获取历史数据,通过定时脚本在空余时间(一般是第二日的零点之后)生成统计数据,存入统计详情表。

留存统计

此处留存以活跃设备举例,留存按照日期,分为昨日留存,3日留存,7日留存,15日留存,30日留存 留存的计算方法是:

  1. 获取今日活跃的账号;
  2. 获取昨日活跃的账号;
  3. 判断前者在后者中的占比;

有几套方案可供选择:

  1. 使用redis中的set,set有求交集的功能。
  2. 将第一步和第二步获取的数据存入map中,循环交叉对比。
  3. 直接使用clickhouse查询(性能极高)。
    三者任选其一,个人推荐第三个方案,不加索引都很快。