大数据-133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比
TL;DR
场景:要做高并发低延迟 OLAP,且不想上整套 Hadoop/湖仓。 结论:ClickHouse 的核心在列式+向量化+MergeTree+近似统计;适合即席分析与近实时写入,不适合强事务与高频行级更新。
简要概述
ClickHouse 是一个快速开源的OLAP数据库管理系统,它是面向列的,允许使用SQL查询实时生成分析报告。
简要选型
| 需求/约束 | 适合 | 不适合 |
|---|---|---|
| 高并发、低延迟 OLAP | ✅ | |
| 重事务/强一致 OLTP | ❌ | |
| 近实时写入、即席分析 | ✅ | |
| 频繁行级更新/删除 | ⚠️ |
OLTP vs OLAP
OLTP
OLTP:Online Transaction Processing,联机事务处理过程。
- 应用场景:ERP、CRM、流程审批、数据录入等
- 特点:线下工作线上化,数据保存在各自的系统中(数据孤岛)
OLAP
OLAP:On-Line Analytical Processing,联机分析系统
- 应用场景:分析报表、分析决策等
- 方案1:数仓(Hadoop HDFS架构)- 架构复杂、时效性低
- 方案2:ClickHouse、Kudu
ClickHouse 发展历史
Yandex公司在2011年上市,ClickHouse在2016年6月15日开源。ClickHouse最初用于Yandex.Metrica(在线流量分析产品)。
技术演变:
- ROLAP:传统关系型数据库OLAP,基于MySQL的MyISAM表引擎
- MOLAP:借助物化视图的形式实现数据立方体
- HOLAP:R和M的结合体
- ClickHouse:ROLAP
ClickHouse 的核心特点
超高的查询性能
- 列式存储:只读取查询所需的列,减少了磁盘 I/O
- 向量化计算:批量处理数据,提高了 CPU 使用效率
- 数据压缩:高效的压缩算法,降低了存储成本
水平可扩展性
- 分布式架构:支持集群部署,轻松处理 PB 级数据
- 线性扩展:通过增加节点提升性能,无需停机
实时数据写入
- 高吞吐量:每秒可插入数百万行数据
- 低延迟:数据写入后立即可查询,满足实时分析需求
丰富的功能支持
- 多样的数据类型
- 高级 SQL 特性:窗口函数、子查询、JOIN 等
- 物化视图:预计算和存储查询结果
典型应用场景
- 用户行为分析
- 日志和监控数据存储
- 商业智能(BI)
ClickHouse支持特性
- 真正的面向列的DBMS
- 数据高效压缩
- 磁盘存储的数据
- 多核并行处理
- 在多个分布式服务器上分布式处理
- SQL语法支持
- 向量化引擎
- 实时数据更新
- 索引
- 适合在线查询
- 支持近似预估计算
- 支持嵌套的数据结构
- 支持数组作为数据类型
- 支持限制查询复杂性以及配额
- 复制数据和对数据完整性的支持
ClickHouse和其他对比
商业OLAP
- HP Vertica、Actian the Vector
- 区别:ClickHouse 是开源而且免费的
云解决方案
- 亚马逊 RedShift、谷歌 BigQuery
- 区别:ClickHouse 可以使用自己机器部署,无需云付费
Hadoop生态
- Cloudera Impala、Spark SQL、Facebook Presto、Apache Drill
- 区别:ClickHouse 支持实时的高并发系统,不依赖于Hadoop生态
开源OLAP数据库
- InfiniDB、MonetDB、LucidDB
- 区别:应用规模小,没有在大型互联网服务中尝试
非关系型数据库
- Druid、Apache Kylin
- 区别:ClickHouse 可以支持从原始数据直接查询
真正的面向列DBMS
要使查询速度变快:
- 减少数据扫描范围
- 减少数据传输时的大小
ClickHouse的优势:
- 支持定长数值,10亿个Int8的值大约消耗1GB的未压缩磁盘空间
- 不仅是一个单一的数据库,而是一个完整的DBMS,支持DDL、DML、权限管理、数据备份、分布式存储等
数据压缩
数据压缩可以提高性能
磁盘存储
即使在数千台服务器上,内存也太小,无法存储所有浏览和会话
多核并行
多核并行进行大型的查询
在多个服务器上分布式处理
数据可以驻留不同的分片上,每个分片可以是用于容错的一组副本
SQL支持
- 支持的查询包括 GROUP BY、ORDER BY
- 子查询在FROM、IN、JOIN子句中被支持
- 标量子查询支持
- 关联子查询不支持
向量化引擎
数据不仅按列存储,而且由矢量-列的部分进行处理。向量化执行是利用CPU的SIMD指令(Single Instrution Multiple Data),即用单条指令处理多条数据。
实时数据更新
ClickHouse支持主键表,数据使用合并树(MergeTree)进行递增排序,数据可以不断的添加到表中,添加数据时无锁处理。
索引
带有主键可以在特定的时间范围内为特定的客户端抽取数据,延迟事件小于几十毫秒。
支持在线查询
可以无延迟的实时的处理查询
支持近似计算
- 系统包含用于近似计算各种值,中位数和分位数的集合函数
- 支持基于部分(样本)数据运行查询并获得近似结果
- 支持为有限数量的随机秘钥运行聚合
数据复制和对数据完整性支持
使用异步多主复制,写入任何可用的副本后,数据将分发到所有剩余的副本
注意事项
ClickHouse并不完美:
- 不支持事务
- 虽然已支持条件 Delete/Update(mutations),只是非事务型、异步、重写分片数据开销大
- 支持有限的操作系统
总结
ClickHouse开源的出现让许多想做大数据分析的公司和企业耳目一新。ClickHouse正是以不依赖Hadoop生态、安装维护简单、查询快速、支持SQL等特点,在大数据领域越走越远。