百度-Doris的用户画像人群应用

1,用户画像群体服务的业务场景
2,技术问题、思路与相关业界方案实现情况
3,基于Doris的技术实现

展开查看详情

1. 1 Doris在用户画像人群业务的应用实践 欧阳利萍 2020-09

2. 2 提纲 u 1,用户画像群体服务的业务场景 u 2,技术问题、思路与相关业界方案实现情况 u 3,基于Doris的技术实现

3. 3 业务场景

4. 4 画像业务分析场景 u 群体分析 u 业务报表 u Geo检索 u 标签索引

5. 5 超大数据规模下的标签索引问题 u 用户画像数据沉淀,支撑应用 u 基于标签索引的人群定向在多个关键行业、场景有广泛应用 u 计算效率对于人群圈选应用至关重要

6. 6 2,技术问题、思路

7. 7 早期基于离线计算的方法 u 灵活性差 u 计算成本高 u 时效不可忍受

8. 8 技术问题 u 影响计算复杂度的几个关键问题 u IO规模 u 百亿级数据规模 u 千级别标签、百万+ tag u 平均数百标签 u 计算 u 对全量数据进行规则过滤

9. 9 技术思路 u 倒排索引解决IO规模问题 u 逻辑转换 u 标签 => 二值TAG u 条件 => 交并集运算 u 存储优化 Bitmap u 分布式计算加速计算过程 u tag的并行 u 分桶

10. 10 3,基于Doris的技术实现

11. 11 Doris分布式查询引擎 • 百度开源数据库Apache Doris的原理与实践, Apache Doris,李超勇

12. 12 Bitmap in Doris 图:roaring bitmap 图:作为Doris索引的bitmap • Daniel Lemire, Owen Kaser, Nathan Kurz, Luca Deri, Chris O'Hara, François Saint-Jacques, Gregory Ssi-Yan-Kai, Roaring Bitmaps: Implementation of an Optimized Software Library, Software: Practice and Experience 48 (4), 2018 arXiv:1709.07821 • Doris存储层设计介绍1——存储结构设计解析,Apache Doris, https://my.oschina.net/u/4574386/blog/4332071

13. 13 Bitmap data type in Doris u Doris引入Bitmap数据类型 (2019年Q4) u 支持细粒度数据应用 u 实现了交并集操作 u intersect_count u union_count • Apache Doris 基于 Bitmap的精确去重和用户行为分析, Apache Doris, 康凯森

14. 14 Doris based solution u 标签-->Tag二值化,uid倒排 u Tag bitmap建库,doris load u intersect_count / union_count u 分布式查询执行

15. 15 标签索引应用在Doris基础实现的问题 u Doris原生bitmap实现的性能测试效果 是否包含稠密 测试类型 标签个数 doris-base bitmap 交集count 否 6 3.76s 并集count 否 6 1.32s 交集count 是 14 超时报错:299960ms 并集count 是 14 超时报错 交集count 是 100 超时报错 并集count 是 100 超时报错 测试数据:x00亿id,x000+标签 (平均标签数x00 ),x00w+ tag 测试环境:物理机(24core / 128G mem / 1T SSD * 5) u Doris 不支持批量id数据导出

16. 16 标签索引应用在Doris基础实现的性能问题 u Doris的bitmap聚合函数逻辑 u Roaring Bitmap 实现 u Roaring bitmap原生支持32位整型的集合运算,并引入了大量指令级别优化,因此压缩比 和运算效率都比较高 u Roaring64Map将bitmap扩展到支持64位整型,高32位采用红黑树的方式存储,集合计 算效率极差 u 画像规模场景下,uid的范围通常需要64位整型表示,计算效率不高 u IO成本与单点计算压力 u 当bitmap基数较大时,如bitmap大小超过1g,网络/磁盘IO处理时间比较长 u 后端be实例在scan数据后全部传输到顶层节点进行求交和并运算,给顶层单节点带来压力, 成为处理瓶颈

17. 17 性能解决方案 u Bitmap 纵向切分建库 u 逻辑 u 减少或避免高32位的计算 u 进一步提升并发能力 u 解决方案 u uid维度纵向切分 u Rid 范围分片 u 降低单个bitmap的size u 场景特点 图:bitmap纵向切分 u 满足正交 u uid有序

18. 18 性能解决方案 u 分布式计算优化 u 相同的id范围,不同tag数据,同实例部署 u 各实例完成本地count,避免merge节点 的单点计算 u 只做节点计算结果的传输,无需原始 bitmap全量数据,减少网络IO 图:以count计算为例的分布式优化

19. 19 性能测试 是否包含 测试类型 检索标签数 Doris basic solution doris rid 外部并行计算 标签索引方案 稠密bitmap 交集count 否 6 3.76s - 0.06s 并集count 否 6 1.32s - 0.06s 交集count 是 14 超时报错:299960ms 5s 2.6s 并集count 是 14 超时报错 7s 2.52s 交集count 是 100 超时报错 9s 6.74s 并集count 是 100 超时报错 12s 7.60s 测试数据:x00亿id,x000+标签 (平均标签数x00 ),x00w+ tag 测试环境:物理机(24core / 128G mem / 1T SSD * 5)

20. 20 标签索引应用在Doris基础实现的功能问题 u 数据灌库、建库 u 问题:原生索引创建耗时冗长 u 解决:Enhanced Spark-based load u 批量ID导出 u 问题:Doris sql 接口支持亿级数据导出存在困难 u 解决:批量导出的方法,解决规模输出问题 u select outfile: MysqlWriter -->FileWriter u 通过Broker把结果数据写到远端存储(hdfs/bos)

21. 21 业务效果 u 标签索引满足主要人群圈选业务场景 u 人群圈选时效从天/小时级提升到秒级响应 u 业务应用效率大幅提升,支持更加灵活的业务应用 u 在广告、增长等方向取得良好业务效果

22. 22 应用指南 (正交的BITMAP计算UDAF ) u 代码合入&官方指南 u http://doris.incubator.apache.org/master/zh-CN/extending-doris/udf/contrib/udaf- orthogonal-bitmap-manual.html#%E8%83%8C%E6%99%AF

23. 23 应用指南 (正交BITMAP计算UDAF ) select BITMAP_COUNT(orthogonal_bitmap_intersect(user_id, tag, 13080800, 11110200)) from user_tag_bitmap where tag in (13080800, 11110200);

24. 24 THANKS ouyangliping@baidu.com