ClickHouse是一款MPP架构的列式存储数据库
完备的DBMS功能
❑ DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
❑ DML(数据操作语言):可以动态查询、插入、修改或删除数据。
❑ 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
❑ 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
❑ 分布式管理:提供集群模式,能够自动管理多个数据库节点。
列式存储与数据压缩
列式存储和数据压缩是高性能数据库必不可少的特点。
让查询变快,最简单的是减少数据扫描范围和数据传输时的大小。
两个是伴生的,列式存储是数据压缩的前提。
列式存储
- 举例1:表有50个字段,现取5个字段。select A1,...,A5 from A
a. 按行处理:由于数据是按行进行组织的,实际上还是扫描了所有的字段。
b. 由于数据按列组织,数据库可以直接获取A1~A5这5列的数据,从而避免了多余的数据扫描。
数据压缩
-
重复率高-> 压缩率高-> 数据体量小-> 网络传输开,网络带宽和磁盘IO压力小。
同一列的重复数据概率更大。 -
clickhouse 特点:
a. 使用列式存储,按列组织,不同列不同文件
b. 数据默认使用LZ4算法压缩,压缩比8:1
c. 列式存储除了降低IO和存储的压力之外,还为向量化执行做好了铺垫
向量化执行引擎
- 向量化执行就是这种方式的典型代表,这项寄存器硬件层面的特性,为上层应用程序的性能带来了指数级的提升。
- 为了实现向量化执行,需要利用CPU的SIMD指令(单条指令操作多条数据)。现代计算机系统概念中,它是通过数据并行以提高性能的一种实现方式(其他的还有指令级并行和线程级并行),它的原理是在CPU寄存器层面实现数据的并行操作。
关系模型与SQL查询
- ClickHouse使用关系模型描述数据并提供了传统数据库的概念(数据库、表、视图和函数等)
- 在SQL解析方面,ClickHouse是大小写敏感的,这意味着SELECT a和SELECT A所代表的语义是不同的。
- ClickHouse使用了关系模型,所以将构建在传统关系型数据库或数据仓库之上的系统迁移到ClickHouse的成本会变得更低,可以直接沿用之前的经验成果。
多样化的表引擎
-
ClickHouse也将存储部分进行了抽象,把存储引擎作为一层独立的接口。
ClickHouse共拥有合并树、内存、文件、接口和其他6大类20多种表引擎。
其中每一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用。 -
好处:通过特定的表引擎支撑特定的场景,十分灵活。对于简单的场景,可直接使用简单的引擎降低成本,而复杂的场景也有合适的选择。
多线程与分布式
- 如果说向量化执行是通过数据级并行的方式提升了性能,
那么多线程处理就是通过线程级并行的方式实现了性能的提升。
由于SIMD不适合用于带有较多分支判断的场景,ClickHouse也大量使用了多线程技术以实现提速,以此和向量化执行形成互补。 - ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说是将多线程和分布式的技术应用到了极致。
多主架构
- ClickHouse则采用Multi-Master多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果
- 这种多主的架构有许多优势,例如对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。所以它天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。
在线查询
数据分片与分布式查询
- 数据分片是将数据进行横向切分,这是一种在面对海量数据的场景下,解决存储和查询瓶颈的有效手段,是一种分治思想的体现。
- ClickHouse提供了本地表(Local Table)与分布式表(Distributed Table)的概念。一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。
- 例如在业务系统上线的初期,数据体量并不高,此时数据表并不需要多个分片。所以使用单个节点的本地表(单个数据分片)即可满足业务需求,待到业务增长、数据量增大的时候,再通过新增数据分片的方式分流数据,并通过分布式表实现分布式查询。
网友评论