生生不息,“折腾”不止;Java晋升指北,让天下没有难学的技术
ClickHouse汲取了各家技术的精髓,将每一个细节都做到了极致
核心特性
1.1 DBMS功能
ClickHouse拥有完备的管理功能,所以称得上是DBMS;
- DDL(数据定义语言):可以动态地创建、修改、删除数据库、表、视图(无需重启服务)
- DML(数据操作语言):CRUD
- 权限控制:可设置库、表的操作权限,保障数据的安全性
- 数据备份/恢复:恢复机制
- 分布式管理:提供集群模式,能够自动管理多个数据库节点
1.2 列式存储/数据压缩
如果想让数据查询变得更快,最简单且有效的方法就是减少数据扫描范围、数据传输时大小,而列式存储、数据压缩就可以帮助我们实现上述两点;
列式存储 VS 行式存储:Select A1,A2,A3,A4 from 表;
- 行式存储,数据库首先会逐行扫描,并获取每行数据的所有字段,再返回每一行的所需字段
- 列式存储,直接获取对应列的字段,避免了多余的数据扫描
数据压缩:有两个字符,ABCDEFGHI、BCDEFGHI - 压缩前:ABCDEFGHI_BCDEFGHI
- 压缩后:ABCDEFGHI_(9,8)
1.3 关系模型/SQL查询
ClickHouse使用关系模型描述数据,并提供了传统数据库的概念
- 数据库
- 表
- 视图
- 函数
ClickHouse完全使用SQL作为查询语言,支持Group By、Order By、Join、in等大部分标准SQL
1.4 多样化表引擎
ClickHouse提供多种多样的表引擎,每一种表引擎都有各自的特点,用户可根据实际业务场景的要求,选择合适的表引擎;
1.5 多主架构
ClickHouse采用Multi-Master多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能够有相同的效果;
1.6 数据分片/分布式
ClickHouse提供了本地表(Local Table)与分布式表(Distributed Table)的概念;
一张本地表就等同于一份数据的分片,而分布式表本身不存储数据,它是本地表的访问代理,其作用类似分库中间件,借助分布式表,能够代理访问多个数据分片,从而实现分布式查询;
架构设计
2.1 Cluster/Replication
ClickHouse的集群由分片Shard组成,而每个分片又通过副本Replica组成;
- ClickHouse的1个节点只能拥有1个分片(如果要实现1分片、1副本,则至少需要2个服务节点)
- 分片只是一个逻辑概念,其物理承载还是副本承担的;
2.2 向量化执行引擎
CPU的SIMD指令;SIMD Single Instruction Multiple Data,单条指令操作多条数据,对于不同数据可能存在相同操作,可以理解为并行操作;