ClickHouse是一个用于数据分析(OLAP)的列式数据库管理系统(column-oriented DBMS),诞生于“战斗民族”俄罗斯,由搜索巨头Yandex公司开源。目前国内不少大厂在使用,包括腾讯、今日头条、携程、快手等,集群规模多达数千节点,阿里云更是推出了云产品ClickHouse。官方介绍:
ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
ClickHouse一定是有不可取代或者不可或缺的特点,才能使得它这么受青睐。
ClickHouse特点
ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎。
列式存储
ClickHouse是一个列式数据库,列式就意味着按列存储与扫描,拥有更小的io操作、更高的压缩比,非常适合于OLAP场景。列式与行式的差异可见下图:
速度快
ClickHouse是一个非常快的数据库系统,数据不仅按列存储、使用高效压缩减少io,同时还支持向量化执行引擎,能够充分使用CPU性能。
ClickHouse不仅查询快,处理单查询高吞吐量每台服务器每秒最多数十亿行;写入速度也非常快,对于大量的数据更新非常适用。
ClickHouse到底有多快?可以参考社区的一个性能测试报表。
另外ClickHouse在单表查询时表现优秀,领跑其他查询引擎,参考:
但是在多表关联查询时,性能表现相对比较差,更多性能测试报告,可以参见:http://www.clickhouse.com.cn/topic/5c453371389ad55f127768ea。
功能丰富
在使用方面,除了速度快,ClickHouse支持大部分的SQL语法,不过目前还有一定限制;ClickHouse支持实时的数据更新,适用于在线查询。ClickHouse具有良好的可扩展性,支持单节点与分布式部署,可以扩展到成百上千个节点,单个节点可容纳万亿行数据或超过100TB数据。此外,ClickHouse还支持主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等特性,参见文末链接的文章。
接下来我们看一看 ClickHouse有哪些应用场景和使用限制。
应用场景与限制
ClickHouse的应用场景:
1.
绝大多数请求都是用于读访问的2.
数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作3.
数据只是添加到数据库,没有必要修改4.
读取数据时,会从数据库中提取出大量的行,但只用到一小部分列5.
表很“宽”,即表中包含大量的列6.
查询频率相对较低(通常每台服务器每秒查询数百次或更少)7.
对于简单查询,允许大约50毫秒的延迟8.
列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)9.
在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)10.
不需要事务11.
数据一致性要求较低12.
每次查询中只会查询一个大表。除了一个大表,其余都是小表13.
查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小
相应地,使用ClickHouse也有其本身的限制:
1.
不支持真正的删除/更新支持 不支持事务(期待后续版本支持)2.
不支持二级索引(新版本已经支持)3.
有限的SQL支持,join实现与众不同4.
不支持窗口功能5.
元数据管理需要人工干预维护
ClickHouse因性能卓越,被广泛应用于各种分析场景(特别是单表查询),例如用户行为分析、日志分析等。我们先从这几个方面认识下ClickHouse,对其有一个大概的了解。
参考:
https://clickhouse.tech/docs/en/
https://zhuanlan.zhihu.com/p/98135840
https://zhuanlan.zhihu.com/p/22165241
https://zhuanlan.zhihu.com/p/71014268