案例来源:@美团点评技术团队
案例地址:
https://tech.meituan.com/user-funnel-analysis-design-build.html
(以下为案例的简要概述,便于之后能快速检索到相关内容。部分文字与图片可能直接来自原文,如有侵权请告知,谢谢)
1. 对于分析人员常用的分析场景(如分析“
首页-搜索-菜品-下单-支付”的漏斗模型),如何提高数据提取的速度
2. 问题:美团每天收集到的用户行为日志有上百亿,使用常规的sql语句对数据进行提取在速度上无法接受
3. 优化方向:
1)注意到业务中有很多维度的筛选条件,漏斗收敛速度极快,首页虽然有上亿的记录,到最下层节点可能只有数千条记录
2)日志类数据一般只会增量不会更新,因此可以考虑一些索引类的手段爱加速查询
4. 优化方式:
1)对于原始的表做一次类倒排索引,以筛选维度为key,用户id与用户行为时间戳为value
2)对于每次查询,首先通过维度key筛选到符合条件的用户id,解决维度筛选问题
3)考虑到漏斗模型要求事件有先后顺序(如先搜索再进入菜品页面),定义时间窗口,筛选符合先后顺序的用户行为事件
4)完整算法如下图
5. 工程实现与优化
6. 效果:
上述方案目前在美团点评内部已经实际落地,稳定运行超过半年以上。每天的数据有几百亿条,活跃用户达到了上亿的量级,埋点属性超过了百万,日均查询量几百次,单次查询的TP95时间小于5秒,完全能够满足交互式分析的预期。相比于原有sql方案,达到了3-4个数量级的性能提升。