写点什么

大数据 -133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比

作者:武子康
  • 2025-10-23
    山东
  • 本文字数:4459 字

    阅读完需:约 15 分钟

大数据-133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比

TL;DR

场景:要做高并发低延迟 OLAP,且不想上整套 Hadoop/湖仓。结论:ClickHouse 的核心在列式+向量化+MergeTree+近似统计;适合即席分析与近实时写入,不适合强事务与高频行级更新。产出:选型决策表 + 分区/排序键速查卡 + 5 条查询模板(安装/集群放到下一章)。



简要概述

ClickHouse 是一个快速开源的 OLAP 数据库管理系统,它是面向列的,允许使用 SQL 查询实时生成分析报告。


随着物联网 IOT 时代的来临,IOT 设备感知和报警存储数据越来越大,有用的价值数据需要数据分析师去分析。大数据分析成了非常重要的环节,开源也为大数据分析工程师提供了十分丰富的工具,但这也增加了开发者选择适合的工具的难度,尤其是新入行的开发者来说。


框架的多样化和复杂度成了很大的难题,例如:Kafka、HDFS、Spark、Hive 等等组合才能产生最后的分析结果,把各种开源框架、工具、库、平台人工整合到一起所需的工作之复杂,是大数据领域开发和数据分析师常有的抱怨之一,也就是他们支持大数据分析简化和统一化的首要原因。



从业务维度来分析,用户需求会反向促使技术发展。

简要选型


  • 需要强事务/OLTP → 不是 CH

  • OLAP + 近实时 + 自建机房成本敏感 → CH 优先

  • 只做离线、成本不敏感且现有湖仓成熟 → SparkSQL/Trino 也行

  • 预计算立方体 + 报表固化 → Druid/Kylin 也可

OLTP

OLTP:Online Transaction Processing:联机事务处理过程。

应用场景

  • ERP:Enterprise Resource Planning 企业资源计划

  • CRM:Customer Relationship Management 客户关系管理


流程审批、数据录入、填报等

具体特点

线下工作线上化,数据保存在各自的系统中,互不相同(数据孤岛)

OLAP

OLAP:On-Line Analytical Processing:联机分析系统


分析报表、分析决策等。

应用场景

方案 1:数仓


如上图所示,数据实时写入 HBase,实时的数据更新也在 HBase 完成,为了应对 OLAP 需求,我们定时(通常是 T+1 或者 T+H)将 HBase 数据写成静态的文件(如:Parquet)导入到 OLAP 引擎(如 HDFS,比较常见的是 Impala 操作 Hive)。这一架构又能满足随机读写,又可以支持 OLAP 分析的场景,但是有如下缺点:


  • 架构复杂:从架构上看,数据在 HBase、消息队列、HDFS 间流转,涉及到的环节过多,运维成本也很高,并且每个环节需要保证高可用,都需要维护多个副本,存储空间也有一定的浪费。最后数据在多个系统上,对数据安全策略、监控都提出了挑战。

  • 时效性低:数据从 HBase 导出静态文件是周期性的,一般这个周期一天(或者一小时),有时效性上不是很高。

  • 难以应对后续的更新:真实场景中,总会有数据是延迟到达的,如果这些数据之前已经从 HBase 导出到 HDFS,新到的变更数据更难以处理了,一个方案是把原有数据应用上新的变更后重写一遍,但这代价又很高。

方案 2:ClickHouse、Kudu

实现方案 2 就是 ClickHouse、Kudu


发展历史 Yandex 在 2016 年 6 月 15 日开源了一个数据分析数据库,叫做 ClickHouse,这对保守的俄罗斯人来说是个特大事件。更让人惊讶的是,这个列式数据库的跑分要超过很多流行的商业 MPP 数据库软件,例如 Vertica。如果你没有 Vertica,那你一定听过 Michael Stonebraker,2014 年图灵奖的获得者,PostgreSQL 和 Ingres 发明者(Sybase 和 SQL Server 都是继承 Ingres 而来的),Paradigm4 和 SciDB 的创办者。Micheal StoneBraker 于 2005 年创办的 Vertica 公司,后来该公司被 HP 收购,HP Vertica 成为 MPP 列式存储商业数据库的高性能代表,Facebook 就购买了 Vertica 数据用于用户行为分析。

ClickHouse 技术演变之路

Yandex 公司在 2011 年上市,它的核心产品是搜索引擎。我们知道,做搜索引擎的公司营收非常依赖流量和在线广告,所以做搜索引擎公司一般会并行推出在线流量分析产品,比如说百度的百度统计,Google 的 Google Analytics 等,Yandex 的 Yandex.Metricah。ClickHouse 就是在这种背景下诞生的。


  • ROLAP:传统关系型数据库 OLAP,基于 MySQL 的 MyISAM 表引擎

  • MOLAP:借助物化视图的形式实现数据立方体,预处理的结果存在 HBase 这类高性能的分布式数据库中

  • HOLAP:R 和 M 的结合体 H

  • ROLAP:ClickHouse

ClickHouse 的核心特点

超高的查询性能

  • 列式存储:只读取查询所需的列,减少了磁盘 I/O。

  • 向量化计算:批量处理数据,提高了 CPU 使用效率。

  • 数据压缩:高效的压缩算法,降低了存储成本。

水平可扩展性

  • 分布式架构:支持集群部署,轻松处理 PB 级数据。

  • 线性扩展:通过增加节点提升性能,无需停机。

实时数据写入

  • 高吞吐量:每秒可插入数百万行数据。

  • 低延迟:数据写入后立即可查询,满足实时分析需求。

丰富的功能支持

  • 多样的数据类型:支持从基本类型到复杂类型的数据。

  • 高级 SQL 特性:窗口函数、子查询、JOIN 等。

  • 物化视图:预计算和存储查询结果,进一步提升查询性能。

典型应用场景

  • 用户行为分析:电商、游戏、社交平台的实时用户行为跟踪。

  • 日志和监控数据存储:处理服务器日志、应用程序日志和性能监控数据。

  • 商业智能(BI):支持复杂的报表和数据分析需求。


部署与运维

  • 单机部署:适合测试和小规模应用。

  • 集群部署:用于生产环境,可通过 Zookeeper 进行协调。

  • 运维工具:提供了监控和管理工具,如 clickhouse-client、clickhouse-copier。

最佳实践

  • 数据分区:根据时间或其他字段进行分区,提高查询效率。

  • 索引优化:使用主键和采样键,加速数据定位。

  • 硬件配置:充分利用多核 CPU、高速磁盘和大内存。

ClickHouse 支持特性

ClickHouse 具体有哪些特性呢:


  • 真正的面向列的 DBMS

  • 数据高效压缩

  • 磁盘存储的数据

  • 多核并行处理

  • 在多个分布式服务器上分布式处理

  • SQL 语法支持

  • 向量化引擎

  • 实时数据更新

  • 索引

  • 适合在线查询

  • 支持近似预估计算

  • 支持嵌套的数据结构

  • 支持数组作为数据类型

  • 支持限制查询复杂性以及配额

  • 复制数据和对数据完整性的支持

ClickHouse 和其他对比

商业 OLAP

例如:


  • HP Vertica

  • Actian the Vector


区别:


  • ClickHouse 是开源而且免费的

云解决方案

例如:


  • 亚马逊 RedShift

  • 谷歌 BigQuery


区别:


  • ClickHouse 可以使用自己机器部署,无需云付费

Hadoop 生态

例如:


  • Cloudera Impala

  • Spark SQL

  • Facebook Presto

  • Apache Drill


区别:


  • ClickHouse 支持实时的高并发系统

  • ClickHouse 不依赖于 Hadoop 生态软件和基础

  • ClickHouse 支持分布式机房的部署

开源 OLAP 数据库

例如:


  • InfiniDB

  • MonetDB

  • LucidDB


区别:


  • 应用规模小

  • 没有在大型互联网服务中蚕尝试

非关系型数据库

例如:


  • Druid

  • Apache Kylin


区别:


  • ClickHouse 可以支持从原始数据直接查询,支持类 SQL 语言,提供了传统关系型数据的便利。

真正的面向列 DBMS

如果你想要查询速度变快:


  • 减少数据扫描范围

  • 减少数据传输时的大小在一个真正的面向列的 DBMS 中,没有任何无用的信息在值中存储。例如:必须支持定长数值,以避免在数值旁边存储长度数字,10 亿个 Int8 的值应该大约消耗 1GB 的未压缩磁盘空间,否则这将强烈影响 CPU 的使用。由于解压的速度(CPU 的使用率)主要取决于未压缩的数据量,即使在未压缩的情况下,紧凑的存储数据也是非常重要的。


因为有些系统可以单独存储独列的值,但由于其他场景的优化,无法有效处理分析查询,例如 HBase、BigTable、Cassandra 和 HypeTable。在这些系统中,每秒可以获得大约十万行的吞吐量,但是每秒不会到达数亿行。


另外,ClickHouse 是一个 DBMS,而不是一个单一的数据库,ClickHouse 允许运行时创建表和数据库,加载数据和运行查询,而不用重新配置或启动系统。




之所以称作 DBMS,因为 ClickHouse:


  • DDL

  • DML

  • 权限管理

  • 数据备份

  • 分布式存储

  • 等等功能

数据压缩

一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩,但是数据压缩可以提高性能。

磁盘存储

许多面向列的 DBMS(SAP HANA 和 GooglePower Drill)只能在内存中工作,但即使在数千台服务器上,内存也太小,无法在 Yandex.Metrica 中存储所有浏览和会话。

多核并行

多核并行进行大型的查询。

在多个服务器上分布式处理

上面列出的 DBMS 几乎不支持分布式处理,在 ClickHouse 中,数据可以驻留不同的分片上,每个分片可以是用于容错的一组副本,查询在所有分片上并行处理,这对用户来说是透明的。

SQL 支持

  • 支持的查询包括 GROUP BY、ORDER BY

  • 子查询在 FROM、IN、JOIN 子句中被支持

  • 标量子查询支持

  • 关联子查询不支持

  • 真是因为 ClickHouse 提供了标准协议的 SQL 查询接口,使得现有可视化分析系统能够轻松的与它集成对接

向量化引擎

数据不仅案列存储,而且由矢量-列的部分进行处理,这使我们能够实现高 CPU 性能。向量化执行时寄存器硬件层面上的特性,可以理解为消除程序中循环的优化。为了实现向量化执行,需要利用 CPU 的 SIMD 指令(Single Instrution Multiple Data),即用单条指令处理多条数据。现代计算机系统概念中,它是利用数据并行度来提高性能的一种实现方式,它的原理是在 CPU 寄存器层面实现数据并行的实现原理。

实时数据更新

ClickHouse 支持主键表,为了快速执行对主键范围的查询,数据使用合并树(MergeTree)进行递增排序,由于这个原因,数据可以不断的添加到表中,添加数据时无锁处理。

索引

例如,带有主键可以在特定的时间范围内为特定的客户端(Metrica 计数器)抽取数据,并且延迟事件小于几十毫秒。

支持在线查询

我们可以使用该系统作为 Web 界面的后端,低延迟意味着可以无延迟的实时的处理查询。

支持近似计算

  • 系统包含用于近似计算各种值,中位数和分位数的集合函数

  • 支持基于部分(样本)数据运行查询并获得近似结果,在这种情况下,从磁盘检索比例较少的数据。

  • 支持为有限数量的随机秘钥(而不是所有秘钥)运行聚合,在数据中秘钥分发的特定场景下,这提供了相对准确的结果,同时使用较少的资源。

数据复制和对数据完整性支持

使用异步多主复制,写入任何可用的副本后,数据将分发到所有剩余的副本,系统在不同的副本上保持相同的数据。要注意的是,ClickHouse 并不完美:


  • 不支持事务

  • 虽然已支持条件 Delete/Update(mutations),只是非事务型、异步、重写分片数据开销大;生产要谨慎,用 TTL/分区替代更常见。

  • 支持有限的操作系统

最后总结

在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终效果,在人力成本、技术能力、硬件成本、维护成本上,让大数据分析变成了很昂贵的事情,很多中小企业非常痛苦,不得不被迫租赁第三方大型数据分析服务。ClickHouse 开源的出现让许多想做大数据且想做大数据分析的很多公司和企业都耳目一新。ClickHouse 正是以不依赖 Hadoop 生态、安装维护简单、查询快速、支持 SQL 等特点,在大数据领域越走越远。

其他系列

🚀 AI 篇持续更新中(长期更新)

AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI-调查研究-108-具身智能 机器人模型训练全流程详解:从预训练到强化学习与人类反馈🔗 AI模块直达链接

💻 Java 篇持续更新中(长期更新)

Java-154 深入浅出 MongoDB 用 Java 访问 MongoDB 数据库 从环境搭建到 CRUD 完整示例 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!🔗 Java模块直达链接

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接

发布于: 11 分钟前阅读数: 6
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比_Java_武子康_InfoQ写作社区