clickhouse的性能指标及重要知识点(一)

性能数据

1.yandex公司使用clickhouse处理20万亿的数据,90%的查询可以在1s内返回

向量化执行

cpu的向量化执行就是指使用SIMD指令执行,相当于单条执行处理多条数据,最通俗的理解就是比如程序的循环展开,比如

int s=10;
for(int i=0;i<10;i++){
	s++
}

类似上述的代码,如果不使用SIMD指令执行,就会调用10次普通指令进行先加操作,而如果使用SIMD指令,那么一条指令就可以完整作业,相当于如下代码

S=10+1+1+1+1+1+...+1

一次性执行操作就可以得到结果.

clickhouse 和 elasticsearch 进行对比是否合适

1.其实正常情况下使用两者进行比较是不太合适的,clickhouse适合的是聚合类的OLAP查询,而es比较适合直接通过关键字去查询记录,很少会使用es去进行聚合类的查询.

Nullable字段类型

Nullable可以修饰基础类型,比如Nullable(Int32)表示该整数字段可以为null,但是Nullable字段类型对查询和写入性能会造成影响,因为如果只是基础类型的列,保存列数据是只有一个[column].bin文件,而如果使用Nullable(基础类型)修饰的列,保存的列数据有两个文件,一个是[column].bin,另一个是[column].null.bin文件专门保存null这个列的null值,这样不论是查询数据还是写入数据都会产生额外的磁盘IO操作

批量插入数据的原子性保证

1.使用CLI接口通过TCP协议和clickhouse交互时,插入数据是没有原子性保证的,可能有一半插入成功,一半插入失败
2.通过JDBC使用Http协议向clickhouse表的单个partition插入批量数据时,如果要插入的记录的条数小于max_insert_block_size的值(1048576),也就是一百万左右,那么clickhouse会保证这一批记录要么都成功插入,要么全部失败,(备注: 如果插入表的不同partition,每个partition的记录要不都成功插入,要么不插入,但是有可能存在部分partition插入成功,部分插入失败的情况)
3.insert …select 时也没有原子性保证,也可能出现部分成功,部分失败的情况

参考链接:
https://clickhouse.com/docs/en/guides/developer/transactional

你可能感兴趣的:(clickhouse,clickhouse,大数据)