ClickHouse丨青训营笔记

66 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第17天

什么是ClickHouse

ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。

ClickHouse储存方式

clickhouse就是列式储存,但是行式存储跟列式存储有什么区别吗,或者说双方的优缺点是什么?

行式存储的优缺点:

优点: 数据都被保存到一起 添加,修改,删除操作相对比较容易 缺点: 当你只是想要查询一条记录中的几列的时候,会把一条记录所有列的数据搜索出来,导致搜索太慢 应用场景: 适合随机的增删改查操作 需要在行中选取所有属性的查询操作 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关 列式存储的优缺点:

优点: 查询时,只有涉及到的列会被读取,所以查询速度会相对较快 投影很高效 任何列都可以作为索引 缺点: 选择完成时,被选择的列要重新组装 添加,修改,删除操作相对比较麻烦 应用场景: 查询需要大量行但是少数几个列 用于存储海量数据,并且修改操作不多的场景

DBMS的功能

  • 几乎覆盖了标准SQL的大部分语法,包括DDL和DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复

多样化引擎

  • ClickHouse和MySQL类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树,日志,接口和其他四大类20多种引擎。

高吞吐写入能力

  • ClickHouse 采用类 LSM Tree的结构,数据写入后定期在后台 Compaction。通过类 LSM tree的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。
  • 官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。

数据分区与线程级并行

  • ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个 CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条 Query 就能利用整机所有 CPU。极致的并行处理能力,极大的降低了查询延时。
  • 所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务,ClickHouse 并不是强项。

性能对比

  • ClickHouse 像很多 OLAP 数据库一样,单表查询速度由于关联查询,而且 ClickHouse 的两者差距更为明显