计算|卫冕OLAP 算法大赛冠军 氪信“列式计算引擎”C位亮相

易观OLAP 算法大赛是国内数据库和在线分析领域的重要赛事 , 直接影响了很多科技公司的技术选型 。 大赛荟聚了数千位算法爱好者 , 美团点评、阿里云、小米、联通等头部科技企业 , 北大、北邮、中科院计算所等科研单位都曾参与过比赛 。 今年10月 , 凭借丰富的数据场景处理经验和技术落地能力 , 氪信团队成为唯一成功解对所有赛题的队伍 , 以接近满分的成绩成功卫冕 。
两届OLAP 算法大赛中 , 都出现了氪信“制胜法宝”——“列式计算引擎”的身影 。 2019年 , 氪信团队凭借氪信列式计算引擎 , 创下300毫秒准确处理8亿条行为数据的记录 , 以相 第 名近百倍的性能赢得 赛冠军 , 验证了氪信列式计算引擎在 规模机器学习的平台技术优势 。 今年的赛题以“事件分析”为题目 , 提出要通过更加精准、智能的数据算法 , 对不断产生的用户行为事件及流量数据进行高效管理 , 更加考察参赛团队的实际场景应用能力 。
以下为氪信团队的经验分享:
赛题解读
今年的赛题 , 相当于提供了一个APP用户运营的场景 , 原始数据为十亿量级的用户行为数据 , 比如某个用户访问了APP , 做了一个行为比如查看一件商品、购买等 , 而平台有5000万的用户数据 , 这也就意味要将用户属性、用户分群关联到数十亿事件的序列上面 , 这其实是一个在相对有限的机器环境下有挑战的问题 。
而正式比赛时使用的三台8C16G的机器 , 要把查询任务做到几秒甚至几百毫秒 , 这其实就是算法本身的一个重大挑战 。
本届赛事难点
本届算法大赛 , 选手虽然提前3天拿到服务器和正式比赛数据 , 看起来有较富裕的预处理时间 。 但在比赛前15分钟 , 选手们会收到100多万的增量数据 , 时间短到不足以对全量数据做预计算、建cube 。
第四届OLAP算法大赛以事件分析为主题 , 题目要求进行event表和profile表的关联 , 两个表之间数据量对比为1000000000 VS 50000000 , join开销过大 。 此外 , 题目还考察参赛者计算去重小计数、中位数等指标的分布式计算方法 , 较为复杂 。
解题思路与技巧
氪信团队选取了“列式计算引擎 + 准实时分析平台”来完成本次比赛 , 基于用户ID和日期分别建立分片 , 然后根据题目类型自行选择合适的分片来执行计算 。 采用了列存+低基数(low cardinality)优化+数据压缩的存储方案 , 计算方案上则采用零共享MPP+CPU指令集优化+数据加热的方式 。
10亿条对5000万条的关联 , 称之为相对较大的join , 在三台配置较低的机器下 , 内存和硬盘的使用都要非常谨慎 。 氪信团队的解决方案是:
首先 , 通过离线任务的方式 , 将历史数据整合成大宽表 , 并将未能成功关联的event 表数据抽离出来;随后 , 在获取到100万条event、5万条profile的增量数据后 , 将增量event 与未关联的历史event数据、全量profile做关联 , 这样需要join的数据仅为数百万对5000万条数据关联 , 大大降低了内存压力 。
经验分享
比赛时究竟是追求极致的速度、还是灵活性/回退能力?氪信团队基于去年的经验 , 设计了一套可以根据赛题变化灵活调整的方案 , 以确保能正确完成每一道题 。 氪信团队在分享中提到 , 方案还有进一步优化的空间:LZ4的解压性能是主要瓶颈;在计算小计/总计时 , 常规方法浪费了一次完成的扫描过程 , 可以用-Resample 组合并扫描;通过预排序/预分组则可以节省去重计数的开销 。
氪信列式计算引擎是一款主要针对大规模数据分析、特征计算、图计算等任务研发的高性能计算引擎 , 侧重于最大化计算性能、提高计算资源利用率;在列式计算引擎的基础上上 , 氪信研发了准实时分析平台 , 提供亚秒级大规模数据计算性能 , 借助准实时级别的数据分析查询能力 , 以“快、稳、准”直击析场景的诸多痛点 。 经评委组验证 , 氪信基于列式计算引擎和准实时分析平台产生的数据处理方法 , 在准确性、可扩展性上均具有显著优势 , 比传统方案处理效能提升数十倍 。 未来 , 氪信将不断推进产品优化和应用创新 , 以人工智能技术锤炼行业数字化、智能化转型新“利器” 。


推荐阅读