阿飞
阿飞
发布于 2025-09-25 / 4 阅读
0
0

clickhouse入门教程

本文就从“ClickHouse 是什么”讲起,一步步带你走到“ClickHouse 的高级使用和优化”,让你既能快速上手,又能理解它背后的原理和适用场景。


一、ClickHouse 是什么?

一句话概括:ClickHouse 是一个开源的列式存储 OLAP(Online Analytical Processing)数据库,由俄罗斯 Yandex 团队开发,用来在极短时间内处理海量数据分析查询。

  • 列式存储:数据是按列而不是按行存储的。适合大规模聚合、统计分析,因为只读取所需列即可,大幅减少 IO。

  • OLAP 数据库:主要用来做数据分析,而不是事务处理(OLTP),重点是大规模读、多维分析

对标的数据库:Apache Doris、Apache Kylin、Druid、Greenplum、BigQuery 等。


二、为什么用 ClickHouse?

1. 速度极快

  • 单机可达数十亿行/秒的聚合速度

  • 多核并行、向量化执行引擎、数据压缩、列存优化等多重加速机制

2. 节省存储

  • 同类型数据列压缩比高(常见 5~10 倍)

  • 用 LZ4、ZSTD 等压缩算法

3. 实时分析能力

  • 支持近实时写入和查询(适合日志分析、监控指标分析)

4. 高可扩展

  • 支持分布式部署,PB 级数据处理

  • 数据副本和分片机制保证可用性与负载均衡


三、ClickHouse 核心概念

理解这几个关键词,就能掌握它的基本原理。

概念

说明

列式存储

数据按列组织,适合聚合和过滤

MergeTree

最常用的表引擎,支持索引、分区、主键等

分区(Partition)

按时间或业务字段分区,加速删除和查询

主键(Primary Key)

用于数据排序与范围查询(不是唯一性约束)

分片(Shard)

数据分布在不同节点,提升并行查询能力

副本(Replica)

同一份数据的多个拷贝,保证高可用


四、基本用法

1. 安装(Docker 快速体验)

docker run -d --name clickhouse \\
  -p 8123:8123 -p 9000:9000 \\
  clickhouse/clickhouse-server
  • 8123 是 HTTP 接口

  • 9000 是 TCP 接口(ClickHouse 客户端用)

2. 连接

进入docker容器终端

docker exec -it clickhouse /bin/bash
clickhouse-client -h localhost --port 9000

3. 创建表

CREATE TABLE events (
    event_date Date,
    user_id UInt32,
    event_type String
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, user_id);

4. 插入数据

INSERT INTO events VALUES ('2025-08-11', 1001, 'login');

5. 查询数据

SELECT event_type, count(*)
FROM events
WHERE event_date >= '2025-08-01'
GROUP BY event_type;


五、适用场景

  • 网站/APP 日志分析(PV、UV、用户行为分析)

  • 监控与告警系统(Prometheus + ClickHouse 存储长期指标)

  • 广告与推荐系统实时分析

  • 物联网数据分析(传感器数据)

  • 金融交易大数据分析


六、性能优化思路

  1. 分区设计:按时间分区,避免全表扫描

  2. 主键排序:将常用过滤字段放在排序键前面

  3. 压缩与编码:选合适的压缩算法(ZSTD 压缩率高,LZ4 解压快)

  4. 批量写入:避免一行一行写(一次 INSERT 多行)

  5. 物化视图:预聚合结果,加速查询


七、进阶功能

  • 物化视图(Materialized View):类似缓存层,提前算好结果

  • TTL 自动过期:让老数据自动删除或归档

  • 异步插入(Async Insert):减少写入延迟

  • Join 优化Join 适合小表和大表匹配,大表对大表用 JOIN ... USING 并配合分布式表


八、ClickHouse 与其他数据库的对比

特性

ClickHouse

MySQL

PostgreSQL

Apache Doris

存储方式

列存

行存

行存

列存

场景

OLAP

OLTP

OLTP+轻量分析

OLAP

查询速度(亿级数据)

实时性

分布式支持

原生

插件或外部方案

插件或外部方案

原生


ClickHouse 工作原理 + 架构的可视化图如下,可以看到查询流程和数据存储逻辑。


评论