ClickHouse前世今生

ClickHouse的发展史

一、Metrage

(1)Key-Value关系模型

LMS树,原本一颗大树分解成多个小树,写入操作内存构建小树同时在内存中排序-达到阀值后台线程写入磁盘,局部有序(磁盘顺序读取,预读缓存,稀疏索引)

(2)Key-Value关系模型

预计算
维度爆炸(2的n次方,如:5个字段,32个组合)

二、OLAPServer

(1)关系模型(类似MyISAM)

LMS数据段思想,稀疏索引,索引文件+数据文件,列式存储(减少数据读取范围)

三、ClickHouse (Click Stream, Data WareHouse)

3.ClickHouse (Click Stream, Data WareHouse)

(1)实时聚合

四、ClickHouse架构概述

(1)对比:Hadoop:汽车 ClickHosue:手动挡赛车

(2)手动:分片,副本重定义

(3) 架构:多主对等网络结构

(4)特点:大规模并行处理(MPP,massively parallel processing)列式存储

五、功能完备

(1)DBMS 分布式管理,提供集群模式,自动管理多个数据库节点

六、列式存储是数据压缩的前提

如 abcdefghi 和 bcdefghi
压缩前 abcdefghi_bdcefghi
压缩后 abcdefghi_(9,8)

(9,8)标识在下划线向前移动9个字节,会有8个字节的重复项,即会匹配到bcdefghi;压缩算法的本质就是如此,数据中的重复项约多,压缩比例就越高,体积越小。。。,为了增加重复的概率,同一个列的数据有相同的数据类型和意义,重复的概率,自然会增加

七、向量化执行:(并行)

(1)SIMD(Single Instruction Multiple Data)单指令操作多条数据。在CPU寄存器层面,实现数据的并行操作。

(2)距离CPU越近,执行速度越快 cpu(寄存器),缓存(L1,L2,L3),内存,磁盘

寄存器速度是 内存的 300倍,是磁盘的3000万倍

八、Sql查询:ClickHouse 是大小写敏感的

九、多样性的表引擎(合并树,内存,文件,接口,和其他6大类20多种表引擎)

十、多线程与分布式:

(1)多线程与向量化执行互补

(2)金科玉律:计算移动比数据移动更划算。实现本地化计算分区(多线程,每个线程处理一个分区),分片(横向扩展,利用分布式原理)

十一、多主架构:

(1)天然规避了单点问题,每个节点功能对等。(redis的cluster)

十二、在线查询:

(1)90%查询1秒内 返回;es不能支持50G以上数据级(亿级),Spark,Hive,需要分钟级响应时间;Vertica,加个昂贵。ClickHouse 即开源,又快

十三、数据分片与分布式查询:

(1)1个服务节点=一个分片,分片的数量上限取决于服务器节点的数量

(2)本地表和分布式表;一个本地表=一个数据库分片;分布式表不存储数据,属于本地数据表访问的代理,类似分库中间件。

(3)灵活:初期,单个分片;数据增多后,增加服务器节点和分布式表可以支持多个分片和服务器节点

十四、ClickHouse的架构设计

数据分片与分布式查询:

(1)Column(泛化设计接口+按类型定义实现的具体逻辑,具体逻辑由ColumnString,ColumnArray等实现) : 用整列的方式来操作数据。

(2)Field(聚合的模式) : 特定场景操作整列中的一行,内部聚合了Null,UInt64,String,Array等13中数据类型和处理逻辑

(3)DataType(泛化设计模式):具体方法由DataTypeString,DataTypeArray等实现;内部包含了Column对象和Field对象

(4)Block与Block流,ClickHouse内部数据操作对象,包含了数据对象,数据类型,列名称三元组(Column,DataType,列名称字符串)

IBlockInputStream 和 IBlockOutputStream (泛化设计)分成三类:1、DDL(DDLQUeryStatusInputStream),2、处理关系运算的相关操作(LimitBlockInputStream/JoinBlockInputStream)
,3、与表引擎对应的操作(MergeTreeBaseSelectBlockInputStream)

(5)Table 对Table发起一次操作通常经历 AST查询语句,根据AST返回指定列数据,数据交由Interpreter处理

(6)Parser 和 Interpreter :Parser(Sql-》AST),Interpreter 解析AST对象,聚合所需资源,执行业务逻辑

(7)Functions Aggregate Functions 普通幻术和聚合函数 ,聚合函数是有状态的,支持序列化和反序列化,能够在分布式节点间传输,实现增量计算

(8)Cluster 和 Replication 分片和副本;(1)ClickHouse的几个节点只能有一个分片(2)分片只是一个逻辑概念,物理承载是副本 (注意:1分片,1副本需要两台服务器)

十五、ClickHouse为什么很快

(1)ClickHouse 目的单纯,希望能以最快的速度进行GROUP BY查询和过滤

(2)着眼硬件(在内存中GROUP BY ,以HashTable装在数据,CPU L3缓存应用 32核心的CPU,一次缓存失效会浪费5亿次/秒的运算,ClickHouse能实现1.75亿次/秒的数据扫描性能)

(3)算法在前,抽象在后(字符串常见的35种常见字符串搜索算法,常量 :Volnitsky,非常量:CPU的向量化执行 SIMD,正则匹配:re2,hyperscan)

(4)用于尝鲜,不行就换(出现更强大的算法,会立即纳入并进行测试,效果好,立即替换原有算法)

(5)特定场景,特殊优化(如去重计数 根据数据量不同选择不同算法啊,小数据量Array 中等HashSet 大量:HyperLogLog) 大杀器:向量化执行 利用寄存器暴力优化

(6)持续测试,持续改进(每个月一个版本持续验证,持续改进)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值