ClickHouse设计原理简介(上)

简介: ClickHouse设计原理简介(上)

简介


1、由Yandex开源的高性能OLAP数据库

2、采用列式存储结构,拥有高效的数据压缩能力

3、通过多核并行处理以及向量执行引擎提升查询能力

4、多样化的表引擎用于支撑不同的应用场景

5、支持多线程和分布式处理

ClickHouse性能

100million条数据量下,ClickHouse的单表聚合查询性能非常高,是Greenplum(x2)集群的16倍,是PostgreSQL的10倍,是Mysql的833倍。

适用场景

  • • 商业智能
  • • 电信行业数据存储统计
  • • 新浪微博用户行为记录分析
  • • 电子商务用户分析
  • • 金融等领域

不适用的场景

  • • 不支持事务
  • • 不擅长根据主键按行粒度进行查询(虽然支持)
  • • 不擅长按行删除数据(虽然支持)
  • • 不擅长按行更新数据(虽然支持)

ClickHouse采用列式存储,其格式相对于行存储格式来说,对行粒度查询进行处理稍显劣势。


核心特性


完备的DBMS功能

  • • DDL:可以动态的创建、修改或删除数据库、表和视图
  • • DML:可以动态查询、插入、修改或删除数据
  • • 权限控制:可以按照用户粒度设置数据库或表的操作权限,保证数据安全
  • • 数据备份与恢复,提供了数据的导入和导出恢复机制
  • • 分布式管理:提供集群模式,能够自动管理多个数据库节点

列式存储和数据压缩

  • • 列式存储有效减少查询时扫描数据量
  • • 列式存储比行存储的另一个优势是数据压缩的友好性
  • • 同一个字段拥有相同的数据类型和实现语义,数据重复项的可能性更高
  • • 默认采用LZ4压缩算法(速度较快,但压缩率较低),以及ZSTD压缩算法(速度较慢,压缩率较高)
  • • ClickHouse的LZ4算法在Yandex的生产环境数据压缩比能达到8:1
  • • TPCH数据(无索引),ckdb压缩率达到52%,rocksdb达到61%

行式存储是按行读取,比如一个表中有很多列,读取其中三列,就需要对所有列进行一个扫描;列式存储只需要对所需要的三列进行读取,就有效的减少了查询时候的扫描数据量。

列式存储是一个字段作为一组数据进行一个存储。

向量化执行引擎

  • • 利用寄存器硬件层面的特性,为上层的程序性能带来了指数级的提升
  • • SIMD指令,单条指令操作多条数据,通过数据并行以提高数据的并行操作。它的原理是在CPU寄存器层面实现数据的并行操作。

image.png

通过数据的并行来提高数据的查询能力和处理能力。

多样化表引擎

  • • 为了避免平庸,ClickHouse拥有和Mysql类似的表引擎设计,它拥有4大类30多种表引擎
  • • 每一种表引擎都拥有各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用

image.png

  • • ReplacingMergeTree

主要用于相同主键进行合并处理比如主键重复的数据有多条,可以在内部合并,最终保留一条

多线程和分布式

  • • 多线程

如果说向量化执行是通过数据级并行的方式提升性能,那么多线程就是通过线程级并行的方式实现性能的提升,默认CPU核数的一半

  • • 分布式

为了利用分布式设计,ClickHouse在数据存取,即支持分区(纵向扩展、利用多线程原理),也支持分片(横向扩展,利用分布式原理,由replica组成)

另外ClickHouse提供了本地表和分布式表的概念,本地表相当于数据分片,分布式表是本地表的访问代理,其本身不存储任何数据


image.png



ClickHouse架构设计


多主架构

区别于Master-Slave主从架构,ClickHouse采用了Multi-Master多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果

多主架构具有很多优势,不用区分多主控节点,数据节点和计算节点,集群中的所有节点功能相同,客户端访问每一个节点都能得到相同的效果

image.png



MergeTree原理解析


image.png


相关文章
|
存储 SQL 运维
涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理
本文尝试解读ClickHouse存储层的设计与实现,剖析它的性能奥妙
3621 0
涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理
|
1月前
|
SQL 消息中间件 分布式计算
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
56 0
|
1月前
|
SQL 大数据
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
65 0
|
存储 自然语言处理 算法
ClickHouse设计原理简介(下)
ClickHouse设计原理简介(下)
371 0
ClickHouse设计原理简介(下)
|
存储 SQL 设计模式
ClickHouse设计原理简介(中)
ClickHouse设计原理简介(中)
421 1
ClickHouse设计原理简介(中)
|
存储 消息中间件 SQL
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
756 0
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
|
存储 SQL 分布式计算
clickhouse简介
clickhouse简介
613 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
1月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
2月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决