ClickHouse / ClickHouse
ClickHouse/ClickHouse
ClickHouse® 是一款实时分析型数据库管理系统。
项目概览
项目概述
ClickHouse® 是一个开源、列式存储的实时分析数据库管理系统,能够实时生成分析数据报告。它由 ClickHouse 公司开发并维护,采用 Apache-2.0 许可证。项目主要使用 C++ 编写,同时也包含部分 Rust 代码。ClickHouse 以其高性能、可扩展性和对 SQL 的广泛支持而闻名,适用于大数据分析场景。
核心功能
- 列式存储:数据按列存储,极大提高分析查询性能。
- 实时分析:支持亚秒级查询响应,适用于实时数据报告。
- 分布式处理:支持多节点集群,实现水平扩展。
- 丰富的数据类型:支持数值、字符串、日期时间、数组、元组、JSON、地理空间等多种类型。
- 高级索引:主键索引、跳数索引(minmax、set、bloom_filter、text 等),加速数据过滤。
- 数据压缩:多种压缩编解码器(LZ4、ZSTD、Delta、T64 等),减少存储占用。
- SQL 支持:支持标准 SQL 及扩展功能,如窗口函数、聚合函数、数组函数等。
- 数据集成:支持从 Kafka、S3、HDFS、MySQL、PostgreSQL 等数据源读取和写入。
- 向量搜索:支持近似最近邻搜索,用于 AI 和机器学习场景。
- 物化视图:支持物化视图和刷新式物化视图,加速复杂查询。
- 备份与恢复:提供 BACKUP/RESTORE 功能,支持多种存储后端。
适用与不适用场景
适用场景:
- 实时分析仪表盘和报表。
- 大规模日志和事件数据分析。
- 在线分析处理(OLAP)工作负载。
- 需要快速聚合查询的场景(如用户行为分析、流量统计)。
- 数据湖和湖仓一体架构(支持 Iceberg、Delta Lake、Hudi 等)。
- 向量相似度搜索(如推荐系统、图像检索)。
不适用场景:
- 高频行级更新(OLTP 工作负载)。
- 事务性应用(ACID 事务支持有限)。
- 小数据量且对延迟极敏感的场景(可能过度设计)。
- 需要复杂 JOIN 的交互式查询(虽然支持,但性能可能不如专用数据库)。
技术架构与依赖
ClickHouse 采用 C++ 编写,核心架构包括:
- 存储引擎:MergeTree 家族(ReplacingMergeTree、SummingMergeTree、AggregatingMergeTree 等),以及 Log、Memory、Distributed 等。
- 查询引擎:向量化执行,支持并行处理。
- 分布式协调:使用 ClickHouse Keeper(基于 Raft)或 ZooKeeper 管理副本和分布式 DDL。
- 网络协议:支持原生 TCP 协议、HTTP 接口、MySQL 和 PostgreSQL 协议。
- 依赖库:包括 Poco、Boost、OpenSSL、zlib、lz4、zstd、Arrow、Parquet 等。
安装与快速开始
安装(Linux、macOS、FreeBSD):
curl https://clickhouse.com/ | sh
启动服务器:
clickhouse server
使用客户端连接:
clickhouse client
快速示例:
CREATE TABLE my_table (id UInt64, name String) ENGINE = MergeTree ORDER BY id;
INSERT INTO my_table VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM my_table;
典型使用方法
创建表:
CREATE TABLE events (
event_date Date,
event_time DateTime,
user_id UInt64,
event_type String
) ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, event_time);
插入数据:
INSERT INTO events VALUES ('2026-08-01', '2026-08-01 10:00:00', 123, 'click');
查询分析:
SELECT event_type, count() AS cnt
FROM events
WHERE event_date >= '2026-08-01'
GROUP BY event_type
ORDER BY cnt DESC;
使用物化视图:
CREATE MATERIALIZED VIEW events_daily
ENGINE = SummingMergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, event_type)
AS SELECT
event_date,
event_type,
count() AS cnt
FROM events
GROUP BY event_date, event_type;
从 S3 读取数据:
SELECT * FROM s3('https://bucket.s3.amazonaws.com/data/*.parquet', 'Parquet');
配置与部署要点
- 配置文件:服务器配置文件位于
/etc/clickhouse-server/config.xml,用户配置在users.xml。 - 内存管理:通过
max_server_memory_usage等设置控制内存使用,避免 OOM。 - 分布式部署:配置
<remote_servers>定义集群,使用 ReplicatedMergeTree 实现数据复制。 - 监控:通过
system系统表(如system.query_log、system.metrics)监控查询和服务器状态。 - 备份:使用
BACKUP命令定期备份数据,支持 S3、Azure Blob Storage 等。 - 安全:配置用户、角色、行级安全策略,限制访问权限。
限制、风险与许可证
- 许可证:Apache-2.0。
- 限制:
- 不支持完整的事务处理(ACID)。
- 行级更新和删除效率较低。
- 复杂 JOIN 可能性能不佳。
- 风险:
- 升级前需备份数据,部分版本升级可能不兼容旧数据格式。
- 分布式环境下需谨慎配置,避免数据不一致。
- 依赖外部服务(如 ZooKeeper)时需保证其高可用。
官方链接
信息来源和分析时间
- 信息来源:GitHub 仓库 README、文档、发布说明。
- 分析时间:2026-08-06。