登录 免费体验Demo
首页 公司动态 新闻资讯 技术干货|扩展ClickHouse后,分析云SQL效率提升了500%

技术干货|扩展ClickHouse后,分析云SQL效率提升了500%

来源:GrowingIO微信公众号    2023-08-07

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的分群、标签等计算,这些分析云产品的核心能力,都对底层引擎查询框架能否高效支持随意组合的多维分析能力具有强依赖性。

1、极致性能

Clickhouse在分析能力上展现了极致的性能,它的列存格式、向量化执行、多核心并行等特性,使其具备良好的并发读扩展能力,支持秒级返回超大数据量的分析查询,能很好支撑UBA、CDP等上层分析工具对海量数据的分析需求。

根据测试,相比传统数据库,Clickhouse的单表查询效率至少能提升10倍以上。

Clickhouse的单表查询极其优异

2、流批一体

UBA的业务场景中有很多实时更新的诉求。当有新的用户进来,企业会对新用户进行分群和创建标签,并希望能马上在分析工具中使用,这样当用户的属性标签发生变化时,能马上体现到用户洞察和运营的场景中,便于业务人员第一时间优化运营策略。

这些实效性的诉求就需要系统的设计方案能满足批流一体的场景。传统的lambda架构下,整个系统的复杂度和开发成本都很高,导致迭代周期变长。

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

Clickhouse的各种MergeTree的机制可以高效合并小文件、合并文件索引,能充分满足数据的实时更新需求。

同时基于该机制,Clickhouse的物化视图和projection能够满足实时生成聚合数据的场景,而非T+1,极大提高了数据查询效率,是数据分析工具底层引擎的不二选择。

“扩展”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模型提速,为产品提供更加灵活的系统伸缩方案,从而支撑业务需要,更好地为精细化营销决策提供数据支撑,最终助力企业实现业务增长。


最新新闻

全域全场景智能易用的分析云

探索