BI与ClickHouse:探索式BI的OLAP技术演进之路

2021-07-28  本文已影响0人  登高且赋

1. BI系统的沉浮

1.1 传统BI之死

为了解决传统早期IT系统在建设过程中“烟囱式”的发展模式,打通相互割裂的“数据孤岛”,让用户拥有站在企业全局鸟瞰一切数据的视角,BI(商业智能)系统的概念在20世纪90年代被提出,即一种统一面向数据仓库,专注于提供数据分析、决策类功能的系统与解决方案。人们通常用BI一词指代这类分析系统。相对于联机事务处理系统(OLTP),我们把这类BI系统称为联机分析(OLAP)系统。

image-20210727183612222

但是传统BI系统的实际的应用效果一直是差强人意。其原因至少有一下几点。

1.2 互联网大潮下的BI系统新生

互联网和云原生SaaS化模式的兴起,为BI系统的商业模式带来了新的思路:

如果说互联网和SaaS化这波技术普惠为现代BI系统带来了新的思路与契机,那么背后的技术创新则保障了其思想的落地。

Google于2003~2006年相继发表了三篇论文“Google File System”“Google MapReduce”和“Google Bigtable”,将大数据的处理技术带进了大众视野。2006年开源项目Hadoop最初指代的是分布式文件系统HDFS和MapReduce计算框架,但是它一路高歌猛进,在此基础之上像搭积木一般快速发展成为一个庞大的生态(包括Yarn、Hive、 HBase、Spark等数十种之多)。在大量数据分析场景的解决方案中, 传统关系型数据库很快就被Hadoop生态所取代。数据查询分析的手段也层出不穷,Spark、 Impala、Kylin等百花齐放。

然而世间并没有万全之策, 虽然Hadoop生态化的属性带来了诸多便利性,但生态化的另一面是臃肿和复杂。Hadoop生态下的每种组件都自成一体、相互独立的格局显很多场景下都过于笨重了。与此同时,随着现代化终端系统对实效性的要求越来越高,Hadoop在海量数据和高时效性的双重压力下,也显得有些力不从心了。

探索式BI的方向

探索式BI系统,在产品定位与设计上是带有互联网SaaS化属性的产品,期望其包括以下特性:

为了满足上述产品特性,开发人员在底层数据库技术选型的时候可谓是绞尽脑汁,尽最大可能来选择合适OLAP技术方案。

OLPA演进之路

OLAP领域技术发展至今可谓百花齐放,但是Mars团队在技术调研后却发现可能要面临无牌可打的窘境。为了解释这个问题,就要先说清楚OLAP的几种常见思路。

OLAP名为联机分析,又可以称为多维分析。 顾名思义,它指的是通过多种不同的维度审视数据,进行深层次分析。维度可以看作观察数据的一种视角,例如人类能看到的世界是三维的,它包含长、宽、高三个维度。直接一点理解,维度就好比是一张数据表的字段,而多维分析则是基于这些字段进行聚合查询。

image-20210727184157147

可以使用一个立方体的图像具象化操作,如上图所示, 对于一张销售明细表,数据立方体可以进行如下操作。

为了实现上述这些操作,将常见的OLAP架构大致分成三类。

第一类架构称为ROLAP(Relational OLAP,关系型OLAP)。它直接使用关系模型构建,数据模型常使用星型模型或者雪花模型。这是最先能够想到,也是最为直接的实现方法。因为OLAP概念在最初提出的时候,就是建立在关系型数据库之上的。多维分析的操作可以直接转换成SQL查询。例如,通过上卷操作查看省份的销售额,就可以转换成类似下面的SQL语句:

select 地区, sum(价格) from Cube group by 地区;
image-20210727183404260

但是这种架构对数据的实时处理能力要求很高。如果对一张存有上亿行数据的数据表同时执行数十个字段的GROUP BY查询,一般的关系型数据库是难以承受的。

第二类架构称为MOLAP(Multidimensional OLAP,多维型 OLAP)。它的出现是为了缓解ROLAP性能问题。MOLAP使用多维数组的形式保存数据,其核心思想是借助预先聚合结果,用更多的存储空间换得查询时间的减少。其具体的实现方式是依托立方体模型的概念:首先, 对需要分析的数据进行建模,框定需要分析的维度字段;然后通过预处理的形式,对各种维度进行组合并事先聚合;最后,将聚合结果以某种索引或者缓存的形式保存起来(通常只保留聚合后的结果,不存储明细数据)。这样一来,在随后的查询过程中,就可以直接利用结果返回数据。

但是这种架构也并不完美。维度预处理可能会导致数据膨胀。当维度数据基数较高的时候(高基数意味着重复相同的数据少),其立方体预聚合后的数据量可能会达到10到20倍的膨胀。另外,由于使用了预处理的形式,数据立方体会有一定的滞后性,不能实时进行数据分析。而且,立方体只保留了聚合后的结果数据,导致无法查询明细数据

第三类架构称为HOLAP(Hybrid OLAP,混合架构的OLAP)。这种思路可以理解成ROLAP和MOLAP两者的集成,即预先聚合一些维度,然后在此基础上再试试聚合计算,算是一种折中的办法。

image-20210727183713512

在介绍了OLAP几种主要的架构之后,再回来说说Mars技术选项。

第一种选项称为传统关系型数据库。在这种选择里,OLAP主要基于以MySQL为数据实现。在ROLAP架构下,直接使用这些数据库作为存储与计算的载体;在MOLAP架构下,则借助物化视图的形式实现数据立方体。在这个时期,不论是 ROLAP还是MOLAP,在数据体量大、维度数目多的情况下都存在严重的性能问题。在Mars项目实战的场景中,在数据量超过80W行后,在KDB上所搭建的Mysql集群需要30s以上才能响应结果,根本无法使用。

第二种选择为大数据技术。以ROLAP架构为例,传统关系型数据库就被Hive和SparkSQL所取代。以Spark相比MySQL这类传统数据库而言,在面向海量数据的处理上性能要优秀很多,但是它更适合作为一个后端的查询系统,在实时性上还是太差,动辄几十秒甚至数分钟的响应时间,难以满足用户需求。再看MOLAP架构,MOLAP背后也转为依托MapReduce或Spark等技术,将其作为立方体的计算引擎,加速立方体的构建过程。其预聚合结果的存储载体也转向HBase这类高性能分布式数据库。主流MOLAP架构已经能够在亿万级数据的体量下实现毫秒级的查询响应时间。尽管如此,MOLAP架构依然存在维度爆炸、数据同步实时性不高的问题。

总结而言,以Spark为代表的新一代ROLAP方案虽然可以一站式处理海量数据,但无法真正做到实时应答和高并发;而新一代的MOLAP方案虽然解决了大部分查询性能的瓶颈问题,能够做到实时应答,但数据膨胀和预处理等问题依然没有被很好解决。不难发现,虽然OLAP在经历了大数据技术的洗礼之后,其各方面性能已经有了脱胎换骨式的改观,但不论是ROLAP还是MOLAP,仍然存在各自的痛点。

其实,除了上述两类方案之外,也有一种另辟蹊径的选择,即摒弃ROLAP和MOALP转而使用搜索引擎来实现OLAP查询,ElasticSearch是这类方案的代表。ElasticSearch支持实时更新,在百万级别数据的场景下可以做到实时聚合查询,但是随着数据体量的继续增大,它的查询性能也将无法保证。

如果单纯从模型角度考虑,很明显ROLAP架构更胜一筹。因为关系模型拥有最好的“群众基础”,也更简单且容易理解。它直接面向明细数据查询,由于不需要预处理,也就自然没有预处理带来的负面影响(维度组合爆炸、数据实时性、更新问题)。

那是否存在这样一种技术,它既使用ROLAP模型,同时又拥有比肩MOLAP的性能呢? 答案就是Clickhouse

Clickhouse的横空出世

ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。来俄罗斯本土搜索引擎企业Yandex 公司, 诞生之初就是为了服务 Yandex 公司自家的 Web 流量分析产品 Yandex.Metrica,后来经过演变,逐渐形成为现在的 ClickHouse,全称是:Click Stream, Data WareHouse

ClickHouse官网:https://clickhouse.tech/,其具有 ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、不需要任何数据预处理、支持批量更新、拥有非常完善的 SQL 持和函数、支持高可用、不依赖Hadoop复杂生态、开箱即用等许多特点。

更让笔者印象深刻的是其查询能力。在 1 亿数据集体量的情况下,ClickHouse 的平均响应速度是 Vertica 的 2.63 倍、InfiniDB 的 17 倍、MonetDB 的 27 倍、Hive 的 126 倍、MySQL 的 429 倍以及Greenplum 的 10 倍。详细的测试结果可以查阅:https://clickhouse.tech/benchmark/dbms/

image-20210727201712054

ClickHouse 是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:

正如上文所述,“世间没有万全策”。ClickHouse作为一款高性能OLAP数据库,虽然足够优秀,但也不是万能的。我们不应该把它用于任何OLTP事务性操作的场景,因为它有以下几点不足:

这些弱点并不能视为ClickHouse的缺点,事实上其他同类高性能的OLAP数据库同样也不擅长上述的这些方面。因为对于一款OLAP数据库而言,上述这些能力并不是重点,只能说这是为了极致查询性能所做的权衡。

BI与Clickhouse的一拍即合

ClickHouse非常适用于商业智能领域(也就Mars所在的BI领域),是因为在这个BI分析的场景下,ClickHouse的缺点都可以被规避:

  1. BI分析场景多为海量数据集中的高性能低延迟的单表单张大宽表聚合查询分析,不关心数据的事务性;
  2. BI分析场景绝大部分场景都是范围聚合,极少按主键获取单行数据;
  3. BI分析分析不会去主动删除数据,不关心删除数据的性能;

正因Clickhouse拥有ROLAP的标准SQL模型,同时又拥有超越MOLAP的极强查询性能,正好符合探索式BI的产品目标。在Clickhouse的助力下,可以实现基于RLOAP的实时数据分析,成功突破数据查询能力瓶颈。根据笔者试验,使用阿里云g5规格云服务器(2vCPUs & 8 GB),便可实现如下计算能力:

后续笔者将会继续介绍Clickhouse架构设计,为大家揭秘其性能突出原因,以及mars上数据查询的实战内容,敬请期待。

上一篇下一篇

猜你喜欢

热点阅读