1 定义
前面章节中提到运营平台需要统计展示最近7天每天的、不同产品、不同城市的活跃设备用户数(即上线次数>=1的设备用户数)。
2 实现方案
既然是要展示最近7天每天的、不同产品、不同城市的活跃设备用户数。那么,首先我们需要存储每天的、不同产品、不同城市的活跃设备用户数。只要保存了,展示就只需要查询DB就可以了。
实现思路还是跟前面章节统计展示绑定设备用户数一样:
- 统计服务保存原始数据:即每天设备上线次数(dev_id, online_count, online_date)
- 每天凌晨跑定时任务:分组汇总聚合每天的不同产品、不同城市组合的活跃设备用户数
3 具体细节
3.1 保存原始数据
还是跟前面章节统计展示绑定设备用户数一样,基于AOP+消息队列异步方式由统计服务保存原始数据。
原始数据表tb_device_online_count,即每日设备上线次数表:基于此表汇总聚合每日活跃设备用户数(上线次数>=1的设备用户数量)
字段 | 描述 |
---|---|
online_count | 上线次数 |
dev_id | 设备id |
online_date | 上线日期 |
3.2 每天定时任务:分组汇总聚合
分组汇总聚合sql:
// 分组汇总聚合当天的不同产品、不同城市组合的活跃设备用户数(上线次数>=1的设备用户数)
select oc.online_date,b.product,b.city,count(distinct b.user_id) as active_users
from tb_device_online_count oc
inner join tb_device_bind b on b.dev_id = oc.dev_id and b.bind_status = 1
where oc.online_date = '2025-02-16' and oc.online_count >= 1
group by oc.online_date,b.product,b.city;
聚合结果保存到每日活跃设备汇总表:
字段 | 描述 |
---|---|
stats_date | 统计日期 |
product_id | 产品id |
city | 城市 |
active_users | 活跃设备用户数 |