大数据-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

要使查询速度变快:

  1. 减少数据扫描范围
  2. 减少数据传输时的大小

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等特点,在大数据领域越走越远。