Clickhouse-一个潜力无限的大数据分析数据库系统

在这里插入图片描述

什么是ClickHouse

ClickHouse是由俄罗斯的Yandex公司在2016年开源的,用于联机分析(OLAP)的列式数据库管理系统(DBMS-database manager system)。它是面向列的,并允许使用SQL查询,实时生成分析报告,ClickHouse最初是一款名为Yandex.Metrica的产品,主要用于WEB流量分析。ClickHouse的全称是Click Stream, Data WareHouse,简称ClickHouse。

ClickHouse不是一个单一的数据库,它允许在运行时创建表和数据库,加载数据和允许查询,而无需重新配置和重新启动服务器。ClickHouse同时支持列式存储和数据压缩,这是对于一款高性能数据库来说必不可少的特性。一个非常流行的观点认为,如果你想让查询变得更快,最简单且有效的方法是减少数据扫描范围和数据传输时的大小,而列式存储和数据压缩就可以帮助我们实现上述两点,列式存储和数据压缩通常是伴生的,因为一般来说列式存储是压缩的前提。

ClickHouse特性

1、完备的DBMS功能

ClickHouse是一个数据库管理系统,而不仅是一个数据库,做为数据库管理系统具备完备的管理功能:

  • DDL:可以动态的创建、修改或删除数据库、表和视图,而无须重启服务。
  • DML:可以动态查询、插入、修改或删除数据
  • 分布式管理:提供集群模式,能够自动管理多个数据库节点
  • 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
  • 数据备份与恢复:提供了数据备份导出导入恢复机制,满足生产环境的要求。

2、列式存储

目前大数据存储有两种方案可以选择,行式存储和列式存储。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 行式存储在数据写入和修改上具有优势
    行存储的写入是一次完成的,如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,可以保证数据的完整性。列式存储需要把一行记录拆分成单列保存,写入次数明显比行存储多(因为磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms),再加上磁头需要在盘上移动和定位花费的时间,实际消耗更大。
    数据修改实际也是一次写入过程,不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的数倍。
    所以,行式存储在数据写入和修改上具有很大的优势。

  • 列式存储在数据读取和解析、分析上具有优势
    数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列的数据就会有冗余列。出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的,列存储每次读取的额数据是集合的一段或者全部,不存在冗余性问题。
    列式存储中的每一列数据类型是相同的,不存在二义性问题,例如,某列类型为整型int,那么他的数据集合一定是整型数据,这种情况使数据解析变得十分容易。相比之下,行存储则要复杂的多,因为在一行记录中保存了多种类型的数据。数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。
    所以,列式存储在数据读取和解析数据做数据分析上更具有优势。

综上所述,行存储的写入是一次性完,消耗的时间比列存储少,并且能够保证数据完整性。缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略,数据量大可能会影响数据处理效率。列存储在写入效率、保证数据完整性上都不如行存储,他的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域比较重要。一般来说一个OLAP类型的查询可能需要访问几百万或者几十亿行的数据,但是OLAP分析时只是获取少数的列,对于这种场景列式数据只需要读取对应的列即可,因此这种场景更适合列式数据库,可以大大提高OLAP数据分析的效率。ClickHouse就是一款使用列式存储的数据库,数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会由不同的文件分别保存,在对OLAP场景分析时,效率很高。

3、数据压缩

为了使数据在传输上更小,处理起来更快,可以对数据进行压缩,ClickHouse默认使用LZ4算法压缩,数据总体比例可达8:1。
ClickHouse采用列式存储,列式存储相对于行式存储另一个优势就是数据压缩的友好性。压缩的本质是按照一定步长对数据进行匹配扫描,数据中重复项越多,则压缩效率越高,则数据体量越小,而数据体量越小,则数据在网络中传输越快,随之IO压力也就越小。

4、向量化执行引擎

在这里插入图片描述
在计算机系统的体系结构中,存储系统是一种层次结构,典型服务器计算机的存储层次结构如上图。上图表述了CPU、三级缓存、内存、磁盘数据容量与数据读取速度比,我们可以看出存储媒介距离CPU越近,则访问数据的速度越快。
注意:缓存就是数据交换的缓冲区,缓存往往都是RAM(断电即掉的非永久存储)它们的作用就是帮助硬件更快的响应。CPU缓存的定义为CPU与内存之间的临时数据交换器,他的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾,CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上,现阶段的CPU缓存一般直接集成在CPU上,CPU往往需要处理相同的数据,重复执行相同的指令。如果这部分数据、指令,CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘读取数据,从而减少了整机的响应时间。
由上图可知,从内存读取数据速度比磁盘读取数据速度要快1000倍,从CPU缓存中读取数据的速度比内存中读取数据的速度要快100倍,从CPU寄存器读取数据的速度比CPU缓存要快3倍。从寄存器中访问数据的速度是从内存中访问速度的300倍,是从磁盘访问数据的30w倍。

如果能从CPU寄存器中访问数据对程序的性能提升意义非凡,向量化执行就是在寄存器层面操作数据,为上层应用程序的性能带来了指数级提升。

为了实现向量化执行,需要利用CPU的SIMD指令,SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据,现代计算机系统概念中,他是通过数据并行以提高性能的一种实现方式,他的原理是在CPU寄存器层实现数据的并行操作。

ClickHouse列式存储除了降低IO和存储的压力外,还为向量化执行做好了铺垫,除了读取磁盘速度快之外,ClickHouse还利用SSE4.2指令集实现向量化执行,为处理数据提升很大的效率。

5、关系模型与标准SQL查询

相比HBase和Redis这类NoSQL数据库,ClickHouse使用关系模型描述数据并提供了传统数据库的概念,ClickHouse完全使用SQL做为查询语言(支持group by,order by、join、in等大部分标准化SQL),ClickHouse提供了标准协议的SQL查询接口,可以与第三方分析可视化系统无缝集成对接,在SQL解析方面,ClickHouse是大小写敏感,string和String代表的语义不同。

6、多样化的表引擎

与MySQL类似,ClickHouse也将存储部分进行了抽象,把存储引擎做为一层独立的接口,ClickHouse拥有各种表引擎,每种表引擎决定不同的数据存储方式,其中每一种表引擎都有着各自的特点,用户可以根据实际业务场景的需求,选择合适的表引擎使用。将表引擎独立设计的好处是通过特定的引擎支撑特定的场景。

7、多线程与分布式

向量化执行通过数据级并行的方式提升了性能,多线程处理时通过线程级并行的方式实现了性能的提升。相比基于底层硬件实现的向量化执行SIMD,线程级并行通常由更高层次的软件层面控制,目前市面上的服务器都支持多核心多线程处理能力。ClickHouse也大量使用了多线程技术以实现提速,以此和向量化执行形成互补。ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说是将多线程和分布式的技术应用到了极致。

8、多主架构

HDFS、Spark、HBase和Elasticsearch这类分布式系统,都采用了Master-Slave主从架构,由一个管控节点作用Leader统筹全局。而ClickHouse则采用Multi-Master多主架构,集群中每个节点角色对等,客户端访问任意一个节点都能得到相同效果,这种多主的架构有许多优势,同时天然避免了单点故障问题。

9、数据分片与分布式查询

ClickHouse支持分片,而分片则依赖于集群,每个集群由1到多个分片组成,而每个分片则对应了ClickHouse的一个服务节点。分片的数量上限取决于节点数量(一个分片只能对应一个服务节点)。ClickHouse拥有高度自动化的分片功能,ClickHouse提供了本地表、分布式表的概念。一张本地表等同于一份数据的分片,而分布式表本身不存储任何数据,他是本地表的访问代理,其作用类似于分库中间件,借助分布式表能够代理访问多个数据分片,从而实现分布式查询。

彩蛋

ClickHouse目前流行程度虽不高,但是潜力很大,在engines.com中的排名也不断提升。
亲测在轻量级大数据分析场景中性价比很高。(传统关系型数据库处理不了,hadoop又太重)
在这里插入图片描述

在这里插入图片描述

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值