【ClickHouse】 架构的核心特性
1. 完备的 DBMS 功能
DDL:动态创建、修改或删除数据库、表和视图
DML:动态查询、插入、修改或删除数据
权限控制:可以按照用户粒度设置数据库或表的操作权限
数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求
分布式管理:提供集群模式,自动管理多个数据库节点
2. 列式存储与数据压缩
列式存储:数据按列进行组织,属于同一列的数据保存在一起,列与列之间也会由不同的文件分别保存。可以有效减少查询时所需扫描的数据量,同时更有利于数据压缩。
数据压缩:压缩的本质是按照一定步长对数据进行匹配扫描,当发现重复部分时就进行编码转换。数据中的重复项越多,则压缩率越高,相应数据体量越小,则数据在网络中的传输越快,对网络带宽和磁盘 IO 的压力也越小。
3. 向量化执行引擎
向量化执行可以简单地看作一项消除程序中循环的优化。为了实现向量化执行,需要利用 CPU 的 SIMD 指令。SIMD 全称 Single Instruction Multiple Data,即利用单条指令操作多条数据,实现原理是在 CPU 寄存器层面实现数据的并行操作。
ClickHouse 目前利用 SSE4.2 指令集实现向量化执行。
4. 关系模型与 SQL 查询
ClickHouse 使用关系模型描述数据并提供了传统数据库的概念(数据库、表、视图和函数等)。
ClickHouse 提供了标准协议的 SQL 查询接口(支持 GROUP BY、ORDER BY、JOIN、IN 等),方便与第三方系统集成。
在 SQL 解析方面,ClickHouse 是大小写敏感的。
5. 多样的表引擎
与 MySQL 类似,ClickHouse 也将存储部分进行了抽象,把存储引擎作为一层独立的接口。ClickHouse 表引擎包含有合并树、内存、文件、接口和其他 6 大类合计 20 多种。其中每一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用。
6. 多线程与分布式
ClickHouse 通过线程级并行的方式实现了性能的提升。
ClickHouse 在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理)。
7. 多主架构
ClickHouse 采用 Multi-Master 多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。
多主的架构的优势:对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。
8. 在线查询
Clickouse 可以支撑海量数据的查询场景,即便是在复杂查询的场景下,它也能够做到极快响应,且无须对数据进行任何预处理加工。
9. 数据分片与分布式查询
ClickHouse 支持分片,而分片则依赖集群。每个集群由 1 到多个分片组成,而每个分片则对应了 ClickHouse 的 1 个服务节点。分片的数量上限取决于节点数量(1 个分片只能对应 1 个服务节点)。
ClickHouse 提供了本地表(Local Table)与分布式表(Distributed Table)的概念。一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。
评论