部署 ClickHouse
列式 OLAP 数据库,数十亿行快速分析。
平台高级
为什么
ClickHouse 是列式数据库优化 OLAP — 数十亿行亚秒查询。聚合比行存储快 100-1000 倍。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
分析、仪表盘和日志/指标聚合用 ClickHouse。OLTP 避免(用 Postgres)。
如何做
1. Docker — clickhouse/clickhouse-server
2. 配置 — config.xml 调优
3. 表 — MergeTree 引擎 OLAP
4. 插入 — 批量插入性能
5. 查询 — SQL 聚合
6. 集群 — 跨 shard 分布式表
7. 物化 — 预计算聚合
示例
# docker-compose.yml
services:
clickhouse:
image: clickhouse/clickhouse-server:24.3
ports: ["8123:8123", "9000:9000"]
volumes: [chdata:/var/lib/clickhouse]
volumes: { chdata: }
# 建表和查询
clickhouse-client --query "
CREATE TABLE events (
date Date, event String, user_id UInt64
) ENGINE = MergeTree() ORDER BY (date, user_id);
"
clickhouse-client --query "
INSERT INTO events VALUES ('2024-01-01', 'click', 123);
"
clickhouse-client --query "
SELECT event, count() FROM events WHERE date = '2024-01-01' GROUP BY event;
"
常见问题
- ⚠单行插入慢 — 批量插入,一次 1000+ 行
- ⚠part 过多 — 小插入过多,用异步插入
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓批量插入 — 每插入 1000-100000 行最佳吞吐
- ✓MergeTree 配合适 ORDER BY — 查询模式主排序键
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求