• 沒有找到結果。

5.4 ClickHouse

5.4.1 图解 ClickHouse

5.4.2 ClickHouse

ClickHouse 简介

ClickHouse是一款开源的面向联机分析处理的列式数据库,其独立于Hadoop大数据体 系,最核心的特点是极致压缩率和极速查询性能。同时,ClickHouse支持SQL查询,

且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据 库速度快一个数量级。

ClickHouse核心的功能特性介绍如下:

完备的DBMS功能

ClickHouse拥有完备的数据库管理功能,具备一个DBMS(Database Management System,数据库管理系统)基本的功能,如下所示。

● DDL (数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无

ClickHouse是一款使用列式存储的数据库,数据按列进行组织,属于同一列的数据会 被保存在一起,列与列之间也会由不同的文件分别保存。

在执行数据查询时,列式存储可以减少数据扫描范围和数据传输时的大小,提高了数 据查询的效率。

例如在传统的行式数据库系统中,数据按如下表5-3顺序存储:

5-3 行式数据库

row ID Flag Name Event Time

0 123456789

01 0 name1 1 2020/1/11

15:19 1 323456789

01 1 name2 1 2020/5/12

18:10 2 423456789

01 1 name3 1 2020/6/13

17:38

N … … … … …

行式数据库中处于同一行中的数据总是被物理的存储在一起,而在列式数据库系统 中,数据按如下表5-4顺序存储:

5-4 列式数据库

row: 0 1 2 N

ID: 12345678901 32345678901 42345678901 …

Flag: 0 1 1 …

Name: name1 name2 name3 …

Event: 1 1 1 …

Time: 2020/1/11

15:19 2020/5/12

18:10 2020/6/13

17:38 …

该示例中只展示了数据在列式数据库中数据的排列方式。对于存储而言,列式数据库 总是将同一列的数据存储在一起,不同列的数据也总是分开存储,列式数据库更适合 于OLAP(Online Analytical Processing)场景。

向量化执行引擎

ClickHouse利用CPU的SIMD指令实现了向量化执行。SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据,通过数据并行以提高性能的一种实现方 式 ( 其他的还有指令级并行和线程级并行 ),它的原理是在CPU寄存器层面实现数据的 并行操作。

关系模型与SQL查询

ClickHouse完全使用SQL作为查询语言,提供了标准协议的SQL查询接口,使得现有的 第三方分析可视化系统可以轻松与它集成对接。

同时ClickHouse使用了关系模型,所以将构建在传统关系型数据库或数据仓库之上的 系统迁移到ClickHouse的成本会变得更低。

数据分片与分布式查询

ClickHouse集群由1到多个分片组成,而每个分片则对应了ClickHouse的1个服务节 点。分片的数量上限取决于节点数量(1个分片只能对应1个服务节点)。

ClickHouse提供了本地表 (Local Table)与分布式表 (Distributed Table)的概念。

一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的 访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从 而实现分布式查询。

ClickHouse 应用场景

ClickHouse是Click Stream + Data WareHouse的缩写,起初应用于一款Web流量分析 工具,基于页面的点击事件流,面向数据仓库进行OLAP分析。当前ClickHouse被广泛 的应用于互联网广告、App和Web流量、电信、金融、物联网等众多领域,非常适用 于商业智能化应用场景,在国内外有大量的应用和实践,具体请参考:https://

clickhouse.tech/docs/en/introduction/adopters/。

ClickHouse 开源增强特性

MRS ClickHouse具备“手动挡”集群模式升级、平滑弹性扩容、高可用HA部署架构等 优势能力,具体详情如下:

● 手动挡集群模式升级

如图5-3所示,多个ClickHouse节点组成的集群,没有中心节点,更多的是一个静 态资源池的概念,业务要使用ClickHouse集群模式,需要预先在各个节点的配置 文件中定义cluster信息,等所有参与的节点达成共识,业务才可以正确的交互访 问,也就是说配置文件中的cluster才是我们通常理解的“集群”概念。

5-3 ClickHouse 集群

常见的数据库系统,隐藏了表级以下的数据分区、副本存储等细节,用户是无感 知的,而ClickHouse则要求用户主动来规划和定义数据分片(shard)、分区

(partition)、副本(replica)位置等详细配置。它的这种类似“手动挡”的属 性,给用户带来极不友好的体验,所以MRS服务的ClickHouse实例对这些工作做 了统一的打包处理,适配成了“自动挡”,实现了统一管理,灵活易用。具体部 署形态上,一个ClickHouse实例将包含3个Zookeeper节点和多个ClickHouse节 点,采用Dedicated Replica模式,数据双副本高可靠。

5-4 ClickHouse 的 cluster 结构

● 平滑的弹性扩容能力

随着业务的快速增长,面对集群存储容量或者CPU计算资源接近极限等场景,

MRS服务提供了平滑的弹性扩容能力,能快速满足客户业务增长诉求。在用户对 集群进行扩容ClickHouse节点时,MRS提供了一键式数据Balance均衡工具,并把 数据均衡的主动权交给用户,由用户根据业务的特点,自由决定数据均衡的方式 和时间点,以便保障业务可用性,实现了更加平滑的扩容能力。

● 高可用HA部署架构

MRS服务提供了基于ELB的HA部署架构,可以将用户访问流量自动分发到多台后 端节点,扩展系统对外的服务能力,实现更高水平的应用容错。如图5-5所示,客

户端应用请求集群时,使用ELB(Elastic Load Balance)来进行流量分发,通过 ELB的轮询机制,写不同节点上的本地表(Local Table),读不同节点上的分布式 表(Distributed Table),这样,无论集群写入的负载、读的负载以及应用接入 的高可用性都具备了有力的保障。

ClickHouse集群发放成功后,每个ClickHouse实例节点对应一个副本replica,两 个副本组成一个shard逻辑分片。如创建ReplicatedMergeTree引擎表时,可以指 定分片,相同分片内的两个副本数据就可以自动进行同步。

5-5 高可用 HA 部署架构图