ClickHouse 是一款 开源的列式数据库管理系统(Column-Oriented DBMS),专为 高性能实时数据分析(OLAP, Online Analytical Processing) 场景设计。
它由俄罗斯搜索引擎公司 Yandex 开发(2016 年开源),目前由独立基金会 ClickHouse, Inc. 维护,广泛应用于大数据分析、日志处理、用户行为洞察等领域。
传统关系型数据库(如 MySQL、PostgreSQL)主要针对 OLTP(在线事务处理) 设计,擅长处理高频、短事务(如订单提交、用户登录),但在 大规模数据分析(如亿级数据聚合、多维报表)时性能不足。
ClickHouse 则专注于 OLAP 场景,通过列式存储、向量化执行、分布式架构等技术,实现了对海量数据的 亚秒级响应,支持复杂查询(如多表关联、窗口函数、近似统计),是大数据分析领域的“性能利器”。
传统数据库采用 行式存储(每行数据连续存储),适合事务处理(需频繁读取整行);
而 ClickHouse 采用 列式存储(同一列数据集中存储),对分析场景更友好:
压缩率高: 同一列数据类型相同、重复度高(如时间戳、状态码),压缩算法(如 LZ4、ZSTD)可大幅减少存储体积(通常压缩比 5-10:1),降低 I/O 成本。
查询高效: 分析查询常需扫描某几列(如统计“某时间段内各地区的销售额”),列式存储仅需读取目标列数据,避免行式存储中大量无关列的 I/O 浪费。
ClickHouse 将数据按列分块(列块,Column Block),以批量(如 1024 行/块)为单位处理查询,而非逐行处理。
这种“向量化”方式减少了 CPU 上下文切换和函数调用开销,显著提升计算效率(尤其对聚合、过滤等操作)。
ClickHouse 支持 横向扩展(Scale Out),通过分片(Shard)和副本(Replica)构建分布式集群:
分片(Shard): 将数据按规则(如哈希、范围)分布到多个节点,避免单节点数据量过大,支持海量数据存储(单集群可达 PB 级)。
副本(Replica): 每个分片可配置多个副本,提供高可用性(节点故障时自动切换)。
分布式查询: 查询会自动路由到所有分片并行执行,结果合并后返回,实现“线性扩展”(节点越多,查询越快)。
尽管是列式存储,ClickHouse 仍提供了多种索引机制加速查询:
一级索引(Primary Index): 基于分片键(如 ORDER BY 列)的稀疏索引,快速定位数据所在分片或数据块(类似“目录”)。
二级索引(Secondary Index): 如 minmax(记录数据块内列的最小/最大值,快速跳过不满足条件的块)、set(记录块内唯一值集合,快速判断是否存在目标值)。
跳数索引(Skipping Index): 针对高频过滤条件的列生成轻量级索引,进一步减少扫描数据量。
ClickHouse 兼容 ANSI SQL 标准(大部分常见语法),并针对分析场景扩展了专用功能:
复杂聚合: 支持 GROUP BY 多维度、窗口函数(OVER)、直方图统计等。
近似查询(Approximate Query): 提供 uniq(HyperLogLog 算法)、quantile(TDigest 算法)等近似函数,在误差可控(如 1%)的前提下,将计算速度提升数十倍。
实时数据摄入: 支持 INSERT 批量写入、Kafka 实时消费(通过 Kafka 引擎表)、文件(CSV/JSON/Parquet)导入等,满足实时分析需求。
ClickHouse 的设计目标是 “在秒级甚至亚秒级内处理十亿级数据的复杂查询”。例如:
对 100 亿条日志数据执行 COUNT(DISTINCT user_id),耗时通常小于 1 秒。
支持每秒百万行的写入吞吐量(取决于硬件配置)。
ClickHouse 凭借其“高性能分析”特性,广泛应用于以下领域:
分析服务器日志、应用日志(如 Nginx 访问日志、Tomcat 错误日志),统计 PV/UV、错误率、响应时间分布等。
监控业务指标(如电商大促期间的订单量、支付成功率),实时生成仪表盘(Grafana、Superset 集成)。
追踪用户点击流(Click Stream),分析用户路径(如从首页到下单的转化漏斗)、留存率、复购率。
结合 A/B 测试,快速验证策略效果(如页面改版对转化率的影响)。
作为 BI 工具(Power BI、Tableau、Quick BI)的数据源,支持实时报表和即席查询(Ad-Hoc Query)。
构建企业级数据仓库(Data Warehouse),整合多业务线数据(如销售、库存、用户),支持多维分析(OLAP Cube)。
与 Flink、Spark 等流处理框架集成,实时清洗、转换数据后写入 ClickHouse,支撑实时决策(如实时风控、动态定价)。
处理传感器、设备的时序数据(如温度、湿度、设备状态),统计异常事件、设备健康度、能耗趋势。
ClickHouse 是 专为 OLAP 场景设计的高性能列式数据库,通过列式存储、向量化执行、分布式架构等技术,解决了传统数据库在大数据分析中的性能瓶颈。
它适合需要 实时或准实时处理海量数据 的场景(如日志分析、用户行为洞察、BI 报表),是企业级数据驱动决策的核心工具之一。
需注意的是,ClickHouse 不适合高并发的 OLTP 事务(如频繁的单行插入、更新、删除),这类场景仍需结合 MySQL、PostgreSQL 等 OLTP 数据库使用。