ClickHouse
每秒扫描数十亿行的列式 OLAP 数据库。
ClickHouse 是一个实时分析数据库,使用列式存储、激进压缩、向量化执行和并行处理在具有数千亿行的表上提供亚秒级查询。Cloudflare、Uber、eBay、Bloomberg、Yandex 使用。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 ClickHouse。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 ClickHouse?
ClickHouse 是一个列式 OLAP 数据库,最初在 Yandex 构建(2016 年开源发布) 用于驱动 Yandex Metrica — 一个每天处理数千亿事件的 Web 分析服务。今天它 支持 Cloudflare 的 Edge 分析、eBay 的数据仓库、Uber 的日志、Bloomberg 的 市场数据,以及大多数现代开源可观测性栈(SigNoz、PostHog、Tinybird、Plausible)。
架构选择 — 列式存储 + 向量化执行 + 激进压缩 — 使得宽事件表上的聚合查询 比行存数据库如 PostgreSQL 或 MySQL 快 10-100×。权衡:较弱的事务语义、 没有行级 UPDATE/DELETE(mutation 是异步批次),以及如果你来自 OLTP 需要 调整的心智模型。
Pier 如何部署它
Pier 使用官方 clickhouse/clickhouse-server Docker 镜像,暴露两个端口 —
8123(HTTP)和 9000(原生 TCP)。数据卷挂载到 /var/lib/clickhouse。默认
版本为 latest;25-alpine、24-alpine 和 23-alpine 是固定的 LTS-ish
变体。
集群模式支持 2-5 节点用于读扩展和复制。通过 Distributed 表引擎分片在集群 启动后仍需要手动 macros + replicas 配置。
备份使用 clickhouse-backup 并可上传到任何 S3 兼容存储。
何时不要使用 ClickHouse
对于 OLTP — Postgres 或 MySQL。对于单行查找 — KV 存储。对于全文搜索 — Elasticsearch。ClickHouse 是规模化分析工作负载;在约 50GB 和数百万行以下, 更简单的数据库通常足够快。
核心功能
列式存储
将每列存储在单独的文件中,带字典、增量和 LZ4/ZSTD 压缩。聚合仅扫描所需的列 — 比行存数据库少几个数量级的 I/O。
向量化查询执行
SIMD 指令每个 CPU 周期处理一批值。单个核心在聚合上每秒处理数千万行。
MergeTree 存储引擎
针对追加密集型时序和事件数据优化的排序合并引擎。后台合并保持数据按主键物理排序。
SQL 加扩展
ANSI SQL 加 ClickHouse 特有扩展 — 数组作为一等公民、lambda、近似分位数、草图(HyperLogLog、T-Digest)、窗口函数和 ASOF JOIN。
分布式查询(集群模式)
跨多个分片和副本的联合查询层。Pier 支持 2-5 节点集群用于分片读扩展。
实时摄取
每节点每秒数百万行的批量 INSERT。HTTP、原生 TCP、MySQL 协议、PostgreSQL 协议、Kafka 引擎 — 选择你的摄取路径。
应用场景
Web 分析与产品遥测
Yandex Metrica(原始用例)、PostHog、Plausible、Tinybird — 每个现代 Web 分析平台都运行在 ClickHouse 上。
应用程序可观测性
SigNoz、Highlight、Uptrace 在 ClickHouse 中存储跟踪、日志和指标。对于高容量日志摄取比 Elasticsearch 更快更便宜。
实时 BI 仪表板
对数亿行的亚秒级响应 — 由 Grafana、Metabase、Superset 驱动的实时运营仪表板的完美选择。
广告技术与营销归因
点击流聚合、队列分析、漏斗查询 — 列式相对行存胜出 100×+ 的工作负载。
金融市场数据
Tick 存储、订单簿回放、回测 — ASOF JOIN 在没有窗口函数的情况下找到时间最近的匹配。
代码示例
CREATE TABLE events (
ts DateTime64(3) CODEC(Delta, ZSTD),
user_id UInt64,
event_type LowCardinality(String),
properties Map(String, String),
country LowCardinality(FixedString(2))
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(ts)
ORDER BY (event_type, user_id, ts); SELECT toStartOfHour(ts) AS hour,
event_type,
count() AS n,
uniqExact(user_id) AS unique_users
FROM events
WHERE ts > now() - INTERVAL 7 DAY
GROUP BY hour, event_type
ORDER BY hour; SELECT
quantilesTDigest(0.5, 0.9, 0.99)(response_ms) AS p50_p90_p99,
uniqHLL12(user_id) AS approx_unique_users
FROM events
WHERE ts > now() - INTERVAL 1 HOUR; SELECT t.ts, t.symbol, t.price, q.bid, q.ask
FROM trades t
ASOF LEFT JOIN quotes q
ON t.symbol = q.symbol
AND t.ts >= q.ts; 对比
| vs PostgreSQL | Postgres 在事务、连接、可变性和 SQL 标准上胜出。ClickHouse 在宽事件表上的分析聚合上胜出 10-100×。许多技术栈两者都用。 |
| vs TimescaleDB | TimescaleDB 通过 hypertable 和持续聚合保留 Postgres 人体工程学。ClickHouse 更激进 — OLAP 优势更大,在一致性、连接和可变性上较弱。 |
| vs Elasticsearch | Elastic 擅长全文和动态 JSON 查询。ClickHouse 在存储和查询结构化事件数据上便宜 10×。许多可观测性栈从 Elastic 迁移日志到 ClickHouse。 |
| vs Snowflake / BigQuery | 托管列式 OLAP — 相同架构家族。ClickHouse 自托管对可预测工作负载便宜得多。云托管在零运维和弹性上胜出。 |
常见问题
ClickHouse SQL 兼容吗?
默认端口?
集群模式需要手动配置吗?
生产中 mutation 安全吗?
BI 工具连接?
备份?
何时不要使用它?
相关服务
在你的 VPS 上部署
ClickHouse 是一个实时分析数据库,使用列式存储、激进压缩、向量化执行和并行处理在具有数千亿行的表上提供亚秒级查询。Cloudflare、Uber、eBay、Bloomberg、Yandex 使用。
部署此服务 →