写点什么

技术分享|GrowingIO 分析云对 ClickHouse 的实践

作者:Geek_2d6073
  • 2023-07-28
    湖北
  • 本文字数:2299 字

    阅读完需:约 8 分钟

GrowingIO 分析云产品的数据底座是 UEI 模型,能够将所有的用户行为、用户属性和商品、门店等不同维度的数据整合在一个视图里。这种最方便用户使用的宽表视图,为上层分析应用提供了有力支持,同时还保证分析云产品可以针对不同业务场景不断推出新的数据分析应用。

方便使用的同时,UEI 模型具备高性能、高实时、易伸缩等特点:

·UEI 模型可以提供强大的查询性能支撑,保证 95 分位的查询时间在 5 秒以内,并且通过各种优化,让这个成绩不断提升。

·UEI 模型可以提供低延迟且全系统一致的实时性,从事件发生到全系统可查仅需要 5 秒时间。

·UEI 模型还提供良好的伸缩能力,从日均 3000 用户、5 万事件到日均亿级事件,支撑十亿级用户量,都可以使用统一的技术方案进行处理。

强大的 UEI 模型背后,是存储引擎 Clickhouse 在支撑。那么,为什么 Clickhouse 能帮分析云做到这些?选定 Clickhouse 做存储引擎后,我们又对它做了哪些调整?本文将对以上两点做出技术分享。

引擎“混战”:ClickHouse 最适合分析云

Clickhouse 的全称为 Click Stream Data WareHouse,是 2016 年开源的用于在线分析处理查询(即 OLAP)MPP 架构的列式存储数据库(即 DBMS),能够使用 SQL 查询实时生成分析报告。

GrowingIO 分析云之所以选择 Clickhouse 作为数据引擎,是因为它具备卓越的 OLAP 能力,并能高效解决流批一体的处理场景,二者天然适配。

可以说,没有比 Clickhouse 更适合做分析云存储引擎的了。

无论是 UBA 里的事件分析、漏斗分析,还是 CDP 的分群、标签等计算,这些分析云产品的核心能力,都对底层引擎查询框架能否高效支持随意组合的多维分析能力具有强依赖性。

01 极致性能

Clickhouse 在分析能力上展现了极致的性能,它的列存格式、向量化执行、多核心并行等特性,使其具备良好的并发读扩展能力,支持秒级返回超大数据量的分析查询,能很好支撑 UBA、CDP 等上层分析工具对海量数据的分析需求。根据测试,相比传统数据库,Clickhouse 的单表查询效率至少能提升 10 倍以上。



Clickhouse 的单表查询极其优异

02 流批一体

UBA 的业务场景中有很多实时更新的诉求。当有新的用户进来,企业会对新用户进行分群和创建标签,并希望能马上在分析工具中使用,这样当用户的属性标签发生变化时,能马上体现到用户洞察和运营的场景中,便于业务人员第一时间优化运营策略。这些实效性的诉求就需要系统的设计方案能满足批流一体的场景。传统的 lambda 架构下,整个系统的复杂度和开发成本都很高,导致迭代周期变长。

为了避免 lambda 架构的复杂度,数据模型的抽象倾向于基于明细的数据,这样一来会更加依赖引擎 OLAP 的性能。

Clickhouse 的各种 MergeTree 的机制可以高效合并小文件、合并文件索引,能充分满足数据的实时更新需求。同时基于该机制,Clickhouse 的物化视图和 projection 能够满足实时生成聚合数据的场景,而非 T+1,极大提高了数据查询效率,是数据分析工具底层引擎的不二选择。

02 “扩展”ClickHouse

尽管 Clickhouse 是最适合分析云的底层引擎,但企业的分析需求极为多样,而且随着越来越多类型的企业加入数字化转型浪潮,分析云在研发更多分析工具/功能的同时,势必要与时俱进对底层引擎也做出相应变动,才能更好满足客户需求。

比如企业在漏斗、留存、归因、事件流等分析上的需求较多,社区版本的 Clickhouse 在支撑这些分析时不够灵活,无法满足愈发多样的分析诉求,造成分析师需要做很多重复动作,SQL 分析效率低。

基于我们对数据分析产品的理解,加上调研收集客户需求后,我们基于社区版 Clickhouse 尝试了以下实践:

实践一:设计高度复用、实时的 UEI 模型,对外简单易用

分析云全系产品的所有场景全部基于统一的 UEI 模型构建,并实现了高度复用性和高度一致性。借助该模型,数据的 95 分位查询时间被控制在 5 秒内。同时,基于 UEI 模型,分析云开发了易用、高效的宽表视图+查询代理机制,对外简单易用。



业务人员无需关心数据的表结构,也无需管理查询优化,即可通过简单的 SQL 进行数据分析,让技术细节透明化。

实践二:构建分析云流批一体架构,数据 5 秒可见

分析云使用 ClickHouse 的 MergeTree 引擎,实现了高效的小文件合并,很好解决了流批一体的处理场景,使接入的实时数据能在 5 秒内在各个分析工具中可见。同时,基于 Clickhouse 物化视图实现任意事件的高效处理,提升了 10 倍的查询效率,并且针对特定场景使用 Projection 机制生成聚合数据,优化了查询性能,降低了统计查询的负载。



流批一体架构示例

实践三:自定义 UDF 函数,满足企业个性化分析需求

分析云自主扩展了 Clickhouse UDF 函数,增强了漏斗、留存、归因、事件流等模型的分析能力,以贴合企业的个性化分析需求。基于统一的用户行为数据模型,企业可以灵活应对各种数据分析场景,减少重复工作。



扩展 UDF 函数后,分析效率倍增

实践四:基于 Bitmap 实现 Clickhouse 上的高效 join

所有的 Mpp 架构的数据库都面临着 join 效率低和大表 join 时出现的内存不足的问题,clickhouse 同样存在这个问题。而增长分析(UBA)目前还是基于人的分析,大量分析场景都需要按人进行 join。分析云自主研发了用于实时高速用户编号服务的“id-service”,可以将所有人进行统一编号,输入一个用户身份,即可返回一个 OneID。有了这个基础,对于人的 join 就可以通过 bitmap 来进行改写,最终实现高效 join。



通过 bitmap 改写的 join 示例

通过以上实践,分析云基于 Clickhouse 搭建了高性能、高实时、易伸缩的 UEI 模型,可承载日均亿级事件的处理查询,在对整体用户量多达 3 亿的运营商客户服务过程中,单日处理过数十亿级别的高峰数据,很好支撑了所有业务系统对于报表数据的需要。

未来 GrowingIO 分析云将继续为 UEI 模型提速,为产品提供更加灵活的系统伸缩方案,从而支撑业务需要,更好地为精细化营销决策提供数据支撑,最终助力企业实现业务增长。

用户头像

Geek_2d6073

关注

还未添加个人签名 2021-12-22 加入

还未添加个人简介

评论

发布
暂无评论
技术分享|GrowingIO分析云对ClickHouse的实践_Geek_2d6073_InfoQ写作社区