ClickHouse / ClickHouse

ClickHouse/ClickHouse

open_in_new前往仓库

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。