列式数据库管理系统之ClickHouse初学
1.ClickHouse入门
ClickHouse 是一个真正的列式数据库管理系统
(DBMS)。在 ClickHouse 中,数据始终是按列存储的,包括矢量(向量或列块)执行的过程。只要有可能,操作都是基于矢量进行分派的,而不是单个的值,这被称为«矢量化查询执行»,它有利于降低实际的数据处理开销。
这个想法并不新鲜,其可以追溯到 APL 编程语言及其后代:A +、J、K 和 Q。矢量编程被大量用于科学数据处理中。即使在关系型数据库中,这个想法也不是什么新的东西:比如,矢量编程也被大量用于 Vectorwise 系统中。
通常有两种不同的加速查询处理的方法:矢量化查询执行和运行时代码生成。在后者中,动态地为每一类查询生成代码,消除了间接分派和动态分派。这两种方法中,并没有哪一种严格地比另一种好。运行时代码生成可以更好地将多个操作融合在一起,从而充分利用 CPU 执行单元和流水线。矢量化查询执行不是特别实用,因为它涉及必须写到缓存并读回的临时向量。如果 L2 缓存容纳不下临时数据,那么这将成为一个问题。但矢量化查询执行更容易利用 CPU 的 SIMD 功能。朋友写的一篇研究论文表明,将两种方法结合起来是更好的选择。ClickHouse 使用了矢量化查询执行,同时初步提供了有限的运行时动态代码生成。
Clickhouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(Olap),能够使用sql查询实时生成分析数据报告.
1.1 ClickHouse的特点
1.1.1 列式存储
以下面的表为例:
id | Name | Age |
---|---|---|
1 | 张三 | 18 |
2 | 李四 | 22 |
1 | 王五 | 34 |
- 采用形式存储时,数据在磁盘上的组织结构为:
1 | 张三 | 18 | 2 | 李四 | 22 | 3 | 王五 | 34 |
---|
好处就是想查询某个人的属性时,可以通过一次磁盘查找加顺序读取就可以。但是当想查所有人的年龄时需要不停的的查找或者全表扫描才行 遍历的很多数据都是不需要的
- 采用列式存储时数据在盘上的组织结构为:
1 | 2 | 3 | 2 | 张三 | 李四 | 王五 | 18 | 22 | 34 |
---|
这时想查搜友人的年龄只需把年龄那一列拿出来就可以了
- 列式存储的好处
- 对于列的聚合、计数、求和等系统操作原因优于行式存储
- 优于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重
- 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间
1.1.2 DBMS的功能
几乎覆盖了标准SQL的大部分语法,包括DDL和DML以及配套的各种函数,用户管理及权限管理,数据的备份与恢复
1.1.3 多样化引擎
ClickHouse和Mysql类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的搜索引擎目前包括合并树、日志、接口和其他四大类20多种引擎
1.1.4 高吞吐写入能力
ClickHouse 采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类LSM tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个短merge sort后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,几盘在HDD上也有着优异的写入性能
官方公开benchmark测试显示能够达到50MB-200MB/s的写入吞吐能力,按照每行100Byte估算,大约相当于50W-200W条/s的写入速度
1.1.5 数据分区与线程及并行
ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条Query就能利用整机所有CPU
。极致的并行处理能力,极大的降低了查询延时
所以,ClickHouse即使对于大量数据的查询也能够化整为零平行处理,但是有一个弊端就是对于单条查询使用多CPU,就不利用同时并发多条查询。所以对于高QPC的查询业务,ClickHouse并不是强项
1.1.6 性能对比
- 单表查询
- 关联查询
结论:ClickHouse像很多OLAP数据库一样,单表查询速度优于关联查询 而且ClickHouse的两者差距更为明显
2.ClickHouse安装
3.数据类型
4.表引擎
5.SQL操作
6.副本
7.分片集群
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503267.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步