跳到主要内容

ClickHouse

问题

什么是 ClickHouse?为什么它查询这么快?

答案

ClickHouse 核心特点

ClickHouse 是由 Yandex 开源的列式存储分析数据库,以极致的查询性能著称。

特点说明
列式存储只读取查询需要的列,减少 IO
向量化执行批量处理 + SIMD 指令
数据压缩列式天然高压缩率(5~10x)
MergeTree核心存储引擎,异步合并

为什么快

常用表引擎

引擎适用场景
MergeTree通用,最常用
ReplacingMergeTree数据去重(最终一致)
AggregatingMergeTree预聚合
SummingMergeTree自动求和
-- 创建 MergeTree 表
CREATE TABLE events (
event_date Date,
user_id UInt64,
event_name String,
amount Decimal(18, 2)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_date) -- 按月分区
ORDER BY (event_date, user_id); -- 排序键

-- 典型分析查询(亚秒级)
SELECT
toDate(event_date) AS dt,
COUNT() AS events,
uniq(user_id) AS uv, -- 近似去重(HyperLogLog)
SUM(amount) AS total_amount
FROM events
WHERE event_date >= '2024-01-01'
GROUP BY dt
ORDER BY dt;
ClickHouse 的局限
  • 不擅长高并发点查(适合分析,不适合 OLTP)
  • 更新/删除代价大(MergeTree 异步合并)
  • JOIN 性能一般(建议预先宽表化)
  • 运维复杂(集群管理、数据一致性)

常见面试问题

Q1: ClickHouse 适合什么场景?

答案

  • BI 看板、实时报表
  • 日志分析、行为分析
  • 大宽表聚合查询
  • 不适合高并发小查询、频繁更新

Q2: ClickHouse 数据如何导入?

答案

  • 批量导入INSERT INTO ... SELECT ...、CSV 文件
  • 实时导入:Kafka 引擎直接消费
  • CDC 同步:通过 Flink/Spark 写入

相关链接