clickhousehbase性能对⽐_ClickHouse介绍
ClickHouse介绍
什么是ClickHouse
ClickHouse 是Yandex开源的⼀个⽤于实时数据分析的基于列存储的数据库,其处理数据的速度⽐传统⽅法快100-1000 倍。
ClickHouse的性能超过了⽬前市场上可⽐的⾯向列的 DBMS,每秒钟每台服务器每秒处理数亿⾄⼗亿多⾏和数⼗千兆字节的数据。ClickHouse基本介绍
ClickHouse作为新兴事物,特点有很多,很多⼤⼚也在使⽤;关于其特点也不多说了,确切的说是为OLAP量⾝打造的数据库
ClickHouse使⽤场景
OLAP的特点
读多于写:不同于事务处理(OLTP)的场景,数据分析(OLAP)场景通常是将数据批量导⼊后,进⾏任意维度的灵活探索、BI⼯具洞察、报表制作等。
⼤宽表:读⼤量⾏但是少量列,结果集较⼩,在OLAP场景中,通常存在⼀张或是⼏张多列的⼤宽表,列数⾼达数百甚⾄数千列。对数据分析处理时,选择其中的少数⼏列作为维度列、其他少数⼏列作为指标列,然后对全表或某⼀个较⼤范围内的数据做聚合计算。这个过程会扫描⼤量的⾏数据,但是只⽤到了其中的少数列。⽽聚合计算的结果集相⽐于动辄数⼗亿的原始数据,也明显⼩得多。
数据批量写⼊:OLTP类业务数据不更新或少更新,对于延时要求更⾼,要避免让客户等待造成业务损失;⽽OLAP类业务,由于数据量⾮常⼤,通常更加关注写⼊吞吐量。
⽆需事务,数据⼀致性要求低:OLAP类业务对于事务需求较少,通常是导⼊历史⽇志数据,或搭配⼀款事务型数据库并实时从事务型数据库中进⾏数据同步。
灵活多变,不适合预先建模:分析场景下,随着业务变化要及时调整分析维度、挖掘⽅法,以尽快发现数据价值、更新业务指标。
ClickHouse使⽤场景压根就是针对OLAP设计的,并且根据相关的特性做了优化。
ClickHouse核⼼特征
完备的DBMS功能
ClickHouse拥有完备的管理功能,作为⼀个DBMS,它具备了⼀些基本功能,如下所⽰。
1. DDL:可以动态地创建、修改或删除数据库、表和视图,⽽⽆须重启服务。
2. DML :可以动态查询、插⼊、修改或删除数据。
3. 权限控制:可以按照⽤户粒度设置数据库或者表的操作权限,保障数据的安全性。
4. 数据备份与恢复:提供了数据备份导出与导⼊恢复机制,满⾜⽣产环境的要求。
5. 分布式管理:提供集模式,能够⾃动管理多个数据库节点。
列式存储与数据压缩
⼀个⾮常流⾏的观点认为,如果你想让查询变得更快,最简单且有效的⽅法是减少数据扫描范围和数据传输时的⼤⼩,⽽列式存储和数据压缩就可以帮助我们实现上述两点。
列式存储和数据压缩通常是伴⽣的,因为⼀般来说列式存储是数据压缩的前提。
按列存储相⽐按⾏存储的另⼀个优势是对数据压缩的友好性。
ClickHouse就是⼀款使⽤列式存储的数据库,数据按列进⾏组织,属于同⼀列的数据会被保存在⼀起,列与列之间也会由不同的⽂件分别保存。
向量化执⾏引擎
向量化执⾏就是这种⽅式的典型代表,这项寄存器硬件层⾯的特性,为上层应⽤程序的性能带来了指数级的提升。
为了实现向量化执⾏,需要利⽤CPU的SIMD指令,即⽤单条指令操作多条数据。
ClickHouse⽬前利⽤SSE4.2指令集实现向量执⾏引擎,对内存中的列式数据,⼀个batch调⽤⼀次SIMD指令,不仅减少了函数调⽤次数、降低了cache miss,⽽且可以充分发挥SIMD指令的并⾏能⼒,⼤幅缩短了计算耗时。
关系模型与SQL查询
相⽐HBase和Redis这类NoSQL数据库,ClickHouse使⽤关系模型描述数据并提供了传统数据库的概念,这使得它平易近⼈,容易理解和学习。
ClickHouse使⽤了关系模型,所以将构建在传统关系型数据库或数据仓库之上的系统迁移到ClickHouse的成本会变得更低,可以直接沿⽤之前的经验成果。
多样化的表引擎
在ClickHouse的设计中,能够察觉到⼀些MySQL的影⼦,表引擎的设计就是其中之⼀。
与MySQL类似,ClickHouse也将存储部分进⾏了抽象,把存储引擎作为⼀层独⽴的接⼝。
多线程与分布式
ClickHouse⼏乎具备现代化⾼性能数据库的所有典型特征,对于多线程和分布式这类被⼴泛使⽤的技术,⾃然更是不在话下。
如果说向量化执⾏是通过数据级并⾏的⽅式提升了性能,那么多线程处理就是通过线程级并⾏的⽅式实现了性能的提升。
ClickHouse还提供了可线性拓展的分布式计算能⼒。ClickHouse会⾃动将查询拆解为多个task下发到集中,然后进⾏多机并⾏处理,最后把结果汇聚到⼀起。
相⽐基于底层硬件实现的向量化执⾏SIMD,线程级并⾏通常由更⾼层次的软件层⾯控制。ClickHouse在数据存取⽅⾯,既⽀持分区 (
纵向扩展,利⽤多线程原理 ),也⽀持分⽚ ( 横向扩展,利⽤分布式原理 ),可以说是将多线程和分布式的技术应⽤到了极致。
多主架构
HDFS、Spark、HBase和Elasticsearch这类分布式系统,都采⽤了Master-Slave主从架构,由⼀个管控节点作为Leader统筹全局。
⽽ClickHouse则采⽤Multi-Master多主架构,集中的每个节点⾓⾊对等,客户端访问任意⼀个节点都能得到相同的效果。这种多主的架构有许多优势,例如对等的⾓⾊使系统架构变得更加简单,不⽤再区分主控节点、数据节点和计算节点,集中的所有节点功能相同。所以它天然规避了单点故障的问题,⾮常适合⽤于多数据中⼼、异地多活的场景redis是nosql数据库吗
数据分⽚与分布式查询
数据分⽚是将数据进⾏横向切分,这是⼀种在⾯对海量数据的场景下,解决存储和查询瓶颈的有效⼿段,是⼀种分治思想的体现。
ClickHouse⽀持分⽚,⽽分⽚则依赖集。每个集由1到多个分⽚组成,⽽每个分⽚则对应了ClickHouse的1个服务节点。分⽚的数量上限取决于节点数量 ( 1个分⽚只能对应1个服务节点 )。
ClickHouse并不像其他分布式系统那样,拥有⾼度⾃动化的分⽚功能。ClickHouse提供了本地表 与分布式表的概念。⼀张本地表等同于⼀份数据的分⽚。⽽分布式表本⾝不存储任何数据,它是本地表的访问代理,其作⽤类似分库中间件。借助分布式表,能够代理访问多个数据分⽚,从⽽实现分布式查询。
ClickHouse的存储
列式存储
相⽐于⾏式存储,列式存储在分析场景下有着许多优良的特性。
1. 分析场景中往往需要读⼤量⾏但是少数⼏个列。⽽列存模式下,只需要读取参与计算的列即可,极⼤的减低了IO cost,加速了查询。
2. 同⼀列中的数据属于同⼀类型,压缩效果显著,更⼩的数据意味着读取也就更快,意味着同等⼤⼩的内存能够存放更多数据,系统
cache效果更好。
3. ⾃由的压缩算法选择。不同列的数据具有不同的数据类型,适⽤的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩
算法。
数据有序存储
ClickHouse⽀持在建表时,指定将数据按照某些列进⾏sort by。排序后,保证了相同sort key的数据在磁盘上连续存储,且有序摆放。
在进⾏等值、范围查询时,where条件命中的数据都紧密存储在⼀个或若⼲个连续的Block中,⽽不是分散的存储在任意多个Block, ⼤幅减少需要IO的block数量。
数据分⽚
ClickHouse⽀持单机模式,也⽀持分布式集模式。在分布式模式下,ClickHouse会将数据分为多个分⽚,并且分布到不同节点上。不同的分⽚策略在应对不同的SQL Pattern时,各有优势。ClickHouse提供了丰富的sharding策略,让业务可以根据实际需求选⽤。
1. random随机分⽚:写⼊数据会被随机分发到分布式集中的某个节点上。
2. constant固定分⽚:写⼊数据会被分发到固定⼀个节点上。
3. hash分⽚:按照某⼀列的值进⾏hash分⽚。
4. ⾃定义表达式分⽚:指定任意合法表达式,根据表达式被计算后的值进⾏hash分⽚。
数据分⽚,让ClickHouse可以充分利⽤整个集的⼤规模并⾏计算能⼒,快速返回查询结果。
分⽚多样化好处也多多。
数据Partitioning
ClickHouse⽀持PARTITION BY⼦句,在建表时可以指定按照任意合法表达式进⾏数据分区操作,⽐如通过toYYYYMM()将数据按⽉进⾏分区、toMonday()将数据按照周⼏进⾏分区、对Enum类型的列直接每种取值作为⼀个分区等。
数据TTL
ClickHouse通过TTL提供了数据⽣命周期管理的能⼒。⽬前⽀持⼏种不同粒度的TTL:
列级别TTL:当⼀列中的部分数据过期后,会被替换成默认值;当全列数据都过期后,会删除该列。
⾏级别TTL:当某⼀⾏过期后,会直接删除该⾏。
分区级别TTL:当分区过期后,会直接删除该分区。
ClickHouse的计算
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论