searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Why ClickHouse is so fast?

2023-05-24 01:41:03
1
0

### 1、写

* 数据会先落到内存中,并且每次写入都是新开一个文件进行存储,因为数据写入都是Batch和Append,相当于单次顺序写入同一个文件中。这种模式避免了随机写,因此能达到很高的吞吐量。
* 由于没有事务,内部没有锁的控制,提高了写入性能。
* 由于ClickHouse的索引面向的对象是一个Part的数据,所以索引小且无需考虑修改,因此创建索引快,也同样提高了写入的性能。
* 可以针对不同的列使用不同的压缩算法,提高整体数据的压缩比。

### 2、读

* 天生的分布式存储能力。
* 根据日期划分partition,根据partition建立文件夹,文件夹内部保留的数据较少,减少扫描行数。
* 针对小的Part,ClickHouse会自动进行merge,减少数据量。
* Clickhouse针对列的压缩会增大压缩比,数据的size降低,磁盘的读取时间耗时降低,page cache的使用率也能得到提升,加快了检索效率。
* vectorized query execution

### 3、other
* 列式存储与行式存储的区别:ClickHouse的列式存储特性,需要分别查询不同的列,查询的SQL中有N列就等于需要去查询N列的数据,而行式存储只需要查询一次即可把所有列都取出。
(1)行式存储这样子会把整行数据都取出来,会对磁盘的IO负载很大。
(2)Clickhouse为了消除列式存储需要多次查询的问题,能多线程(the number of physical CPU cores)并行查询,减少了影响。
* 稀疏索引不同于唯一索引,相比唯一索引而言索引命中效率比较低。

### 4、为什么ClickHouse不适合高频的读写?
(1)读:

* 每次query的时候都会动用{the number of physical CPU cores}线程去进行查询
* 每次query都是以{index_granularity}为单位进行检索、解压缩

(2)写:ClickHouse不是LSM TREE结构,所以无论一次写入的数据量多少都会被直接写入到filesystem中,如果高频的写入则会导致part太多

0条评论
0 / 1000
白****新
5文章数
1粉丝数
白****新
5 文章 | 1 粉丝
白****新
5文章数
1粉丝数
白****新
5 文章 | 1 粉丝
原创

Why ClickHouse is so fast?

2023-05-24 01:41:03
1
0

### 1、写

* 数据会先落到内存中,并且每次写入都是新开一个文件进行存储,因为数据写入都是Batch和Append,相当于单次顺序写入同一个文件中。这种模式避免了随机写,因此能达到很高的吞吐量。
* 由于没有事务,内部没有锁的控制,提高了写入性能。
* 由于ClickHouse的索引面向的对象是一个Part的数据,所以索引小且无需考虑修改,因此创建索引快,也同样提高了写入的性能。
* 可以针对不同的列使用不同的压缩算法,提高整体数据的压缩比。

### 2、读

* 天生的分布式存储能力。
* 根据日期划分partition,根据partition建立文件夹,文件夹内部保留的数据较少,减少扫描行数。
* 针对小的Part,ClickHouse会自动进行merge,减少数据量。
* Clickhouse针对列的压缩会增大压缩比,数据的size降低,磁盘的读取时间耗时降低,page cache的使用率也能得到提升,加快了检索效率。
* vectorized query execution

### 3、other
* 列式存储与行式存储的区别:ClickHouse的列式存储特性,需要分别查询不同的列,查询的SQL中有N列就等于需要去查询N列的数据,而行式存储只需要查询一次即可把所有列都取出。
(1)行式存储这样子会把整行数据都取出来,会对磁盘的IO负载很大。
(2)Clickhouse为了消除列式存储需要多次查询的问题,能多线程(the number of physical CPU cores)并行查询,减少了影响。
* 稀疏索引不同于唯一索引,相比唯一索引而言索引命中效率比较低。

### 4、为什么ClickHouse不适合高频的读写?
(1)读:

* 每次query的时候都会动用{the number of physical CPU cores}线程去进行查询
* 每次query都是以{index_granularity}为单位进行检索、解压缩

(2)写:ClickHouse不是LSM TREE结构,所以无论一次写入的数据量多少都会被直接写入到filesystem中,如果高频的写入则会导致part太多

文章来自个人专栏
clickhouse
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0