Skip to main content
[ PIER ]

ClickHouse

每秒扫描数十亿行的列式 OLAP 数据库。

Database #analytics#olap#columnar

ClickHouse 是一个实时分析数据库,使用列式存储、激进压缩、向量化执行和并行处理在具有数千亿行的表上提供亚秒级查询。Cloudflare、Uber、eBay、Bloomberg、Yandex 使用。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 ClickHouse。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 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。默认 版本为 latest25-alpine24-alpine23-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 在没有窗口函数的情况下找到时间最近的匹配。

代码示例

创建 MergeTree 表 sql
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);
在数秒内聚合十亿行 sql
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;
近似分位数(HyperLogLog + T-Digest) sql
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;
ASOF JOIN(金融风格最近时间) sql
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 兼容吗?
大部分 — ANSI SQL 加 ClickHouse 扩展。JOIN 有效但不是其强项;OLAP 聚合和数组/映射操作是。不要期望事务语义(历史上仅 INSERT,没有行级 UPDATE/DELETE;mutation 存在但是异步的)。
默认端口?
8123/tcp 用于 HTTP,9000/tcp 用于原生 TCP 协议。Pier 暴露两者。JDBC/ODBC 驱动程序使用 HTTP;官方 `clickhouse-client` 使用原生 9000。
集群模式需要手动配置吗?
Pier 支持 2-5 节点集群用于读扩展和复制。分片和分布式表在部署后仍需要一些手动配置 — 见 ClickHouse 文档。
生产中 mutation 安全吗?
ALTER TABLE ... DELETE / UPDATE 是异步且昂贵的。优先设计模式,使 DELETE 通过分区删除(ALTER TABLE ... DROP PARTITION),更新通过 ReplacingMergeTree 追加然后去重。
BI 工具连接?
Grafana、Metabase、Superset、Tableau 都有原生 ClickHouse 连接器。Java/Kotlin 用 JDBC。Power BI/Excel 用 ODBC。
备份?
Pier 通过 `clickhouse-backup` 进行计划备份,用于完整或按数据库转储。可上传到任何 S3 兼容存储。
何时不要使用它?
事务工作负载 — 选 Postgres。按键的单行查找 — 选 Postgres 或 KV 存储。全文搜索 — 选 Elasticsearch。50GB 以下数据集 — Postgres 分析查询通常足够快。

相关服务

在你的 VPS 上部署

ClickHouse 是一个实时分析数据库,使用列式存储、激进压缩、向量化执行和并行处理在具有数千亿行的表上提供亚秒级查询。Cloudflare、Uber、eBay、Bloomberg、Yandex 使用。

部署此服务 →