摘要
当数据量达到亿级甚至十亿级时,实时数据分析能力成为业务竞争的关键。TiDB(HTAP 架构)与 ClickHouse(专用 OLAP 引擎)代表了两种不同的技术路线:前者追求事务与分析的一体化,后者专注于极致的查询性能。本文基于 10 亿级数据量的测试场景,从架构、查询性能、写入能力、实时性四个维度进行深度对比,并提供互补方案的实践建议。
本文适合谁:需要处理大规模实时数据分析的数据工程师、架构师,以及正在评估 HTAP 方案与专用 OLAP 方案选型的技术决策者。
一、架构对比:HTAP vs 专用 OLAP
1.1 核心架构差异
| 维度 |
TiDB |
ClickHouse |
| 架构类型 |
HTAP(事务 + 分析一体化) |
专用 OLAP(纯分析引擎) |
| 存储模型 |
行存(TiKV)+ 列存(TiFlash)双引擎 |
纯列式存储(MergeTree 系列) |
| 数据写入 |
实时写入(毫秒级延迟) |
批量写入(建议 1-5 分钟批次) |
| 事务支持 |
完整 ACID 事务 |
无事务支持 |
| 查询类型 |
OLTP + OLAP 混合负载 |
纯 OLAP |
| 数据新鲜度 |
实时(TiFlash 异步复制,秒级延迟) |
近实时(依赖写入批次) |
| JOIN 能力 |
完整支持(分布式 JOIN) |
支持(但多表 JOIN 性能受限) |
| 更新/删除 |
实时支持 |
不支持直接更新(Mutation 操作代价大) |
| 压缩比 |
中等(列存 TiFlash 较高) |
极高(专用列式压缩) |
1.2 架构示意图
TiDB HTAP 架构:
┌─────────┐ ┌──────────────────────────────────┐
│ 应用层 │────▶│ TiDB Cluster │
└─────────┘ │ ┌──────────┐ ┌──────────┐ │
│ │ TiDB │ │ PD │ │
│ │ (SQL层) │ │ (调度层) │ │
│ └────┬─────┘ └──────────┘ │
│ │ │
│ ┌────┴─────────────┐ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────┐ ┌──────────┐ │
│ │ TiKV │──▶│ TiFlash │ │
│ │(行存) │ │(列存) │ │
│ └────────┘ └──────────┘ │
└──────────────────────────────────┘
事务读写 → TiKV | 分析查询 → TiFlash
ClickHouse OLAP 架构:
┌─────────┐ ┌──────────────────────────────────┐
│ 应用层 │────▶│ ClickHouse Cluster │
└─────────┘ │ ┌──────────┐ ┌──────────┐ │
│ │ Node 1 │ │ Node 2 │ ... │
│ │ (分片) │ │ (分片) │ │
│ │ MergeTree│ │ MergeTree│ │
│ └──────────┘ └──────────┘ │
└──────────────────────────────────┘
所有查询均走列式存储引擎
二、查询性能对比(10 亿级数据)
2.1 测试环境说明
| 测试参数 |
配置 |
| 数据量 |
10 亿行(约 100GB 原始数据) |
| 数据模型 |
订单表(20+ 列,含时间、金额、维度字段) |
| TiDB 配置 |
6 节点(3 TiDB + 3 TiKV + 3 TiFlash) |
| ClickHouse 配置 |
6 节点(3 分片 × 2 副本) |
| 硬件 |
每节点 16C64G,NVMe SSD |
2.2 聚合查询对比
-- 测试 SQL 1:单表聚合(按日期 + 类别分组统计)
SELECT
order_date,
category,
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
AVG(amount) AS avg_amount
FROM orders
WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY order_date, category
ORDER BY order_date, total_amount DESC;
| 性能指标 |
TiDB (TiFlash) |
ClickHouse |
| 首次执行时间 |
3.2s |
1.8s |
| 缓存命中执行时间 |
0.8s |
0.3s |
| 内存占用 |
4.2 GB |
2.1 GB |
| 返回行数 |
~18,000 |
~18,000 |
-- 测试 SQL 2:多维度 GROUP BY(高基数聚合)
SELECT
province,
city,
category,
payment_method,
COUNT(DISTINCT user_id) AS unique_users,
SUM(amount) AS total_amount,
PERCENTILE(amount, 0.95) AS p95_amount
FROM orders
WHERE order_date = '2026-06-01'
GROUP BY province, city, category, payment_method;
| 性能指标 |
TiDB (TiFlash) |
ClickHouse |
| 首次执行时间 |
5.1s |
2.4s |
| 缓存命中执行时间 |
1.5s |
0.6s |
2.3 JOIN 查询对比
-- 测试 SQL 3:双表 JOIN(订单 + 用户维度)
SELECT
c.province,
c.city,
c.user_level,
o.category,
COUNT(*) AS cnt,
SUM(o.amount) AS total
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.order_date BETWEEN '2026-01-01' AND '2026-03-31'
GROUP BY c.province, c.city, c.user_level, o.category;
| 性能指标 |
TiDB (TiFlash) |
ClickHouse |
| 执行时间 |
4.5s |
8.2s |
| 说明 |
优化器自动选择 TiFlash 列存路径 |
多表 JOIN 是 ClickHouse 相对弱项 |
-- 测试 SQL 4:三表 JOIN(订单 + 用户 + 商品)
SELECT
p.brand,
p.category,
c.user_level,
COUNT(*) AS cnt,
SUM(o.amount) AS total,
AVG(o.amount) AS avg_amt
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN products p ON o.product_id = p.product_id
WHERE o.order_date BETWEEN '2026-04-01' AND '2026-06-30'
GROUP BY p.brand, p.category, c.user_level
ORDER BY total DESC
LIMIT 100;
| 性能指标 |
TiDB (TiFlash) |
ClickHouse |
| 执行时间 |
7.8s |
15.6s |
| 说明 |
MPP 模式下三表 JOIN 表现稳定 |
三表 JOIN 性能下降明显 |
2.4 宽表扫描对比
-- 测试 SQL 5:全表扫描 + 过滤(无索引依赖)
SELECT *
FROM orders
WHERE order_date = '2026-06-02'
AND amount > 1000
AND status = 'completed'
ORDER BY amount DESC
LIMIT 500;
| 性能指标 |
TiDB (TiFlash) |
ClickHouse |
| 执行时间 |
2.1s |
0.8s |
| 吞吐(行/秒) |
~50 万 |
~120 万 |
2.5 查询性能总结
| 查询类型 |
TiDB 优势场景 |
ClickHouse 优势场景 |
| 单表聚合 |
表现良好,延迟可接受 |
极致性能,适合大批量聚合 |
| 多表 JOIN |
显著优势(优化器 + MPP) |
弱项,三表以上 JOIN 性能下降 |
| 宽表扫描 |
良好(TiFlash 列存) |
极致(专用列式引擎) |
| 实时点查 |
支持(走 TiKV 行存) |
不适用 |
| TopN 查询 |
良好 |
优秀 |
| 唯一计数 |
良好(近似 + 精确) |
极致(HyperLogLog 精度可调) |
三、数据写入能力对比
| 写入指标 |
TiDB |
ClickHouse |
| 写入模式 |
实时逐行写入 |
批量写入(推荐) |
| 单行写入延迟 |
< 5ms |
N/A(不支持高效单行写入) |
| 批量写入吞吐 |
5-10 万 TPS |
50-100 万行/秒 |
| 写入一致性 |
强一致(Raft 多数派) |
最终一致(异步合并) |
| UPSERT 支持 |
原生支持(INSERT ON DUPLICATE KEY) |
通过 ReplacingMergeTree(延迟合并) |
| 部分列更新 |
原生支持(UPDATE 语句) |
不支持(需整行 Mutation,代价大) |
| 删除操作 |
原生支持(DELETE 语句) |
不支持(Mutation 操作,后台异步执行) |
写入模式对比
-- TiDB:实时写入(标准 SQL)
INSERT INTO orders (order_id, customer_id, amount, order_date)
VALUES (10001, 2001, 150.00, '2026-06-02');
-- 毫秒级写入,立即可查询
-- ClickHouse:批量写入(推荐方式)
INSERT INTO orders VALUES
(10001, 2001, 150.00, '2026-06-02'),
(10002, 2002, 230.00, '2026-06-02'),
(10003, 2003, 180.00, '2026-06-02');
-- 建议每批 10,000-100,000 行
四、实时性对比
| 实时性指标 |
TiDB |
ClickHouse |
| 数据写入到可查询延迟 |
毫秒级(TiKV)~ 秒级(TiFlash) |
秒级 ~ 分钟级(依赖合并周期) |
| 实时仪表盘延迟 |
< 3 秒 |
1-5 分钟 |
| 实时告警延迟 |
< 1 秒 |
不适用 |
| 实时报表延迟 |
< 5 秒 |
1-10 分钟 |
| 流式写入支持 |
通过 TiCDC + Kafka |
通过 Kafka/本地文件批量导入 |
五、互补方案:TiDB + ClickHouse
5.1 架构组合方案
在实际生产中,TiDB 与 ClickHouse 并非互斥,可以构建互补的数据分析架构:
互补架构方案:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 业务系统 │────▶│ TiDB │────▶│ TiCDC │────▶│ ClickHouse│
└──────────┘ │(事务+实时) │ │(增量同步) │ │(深度分析) │
└──────────┘ └──────────┘ └──────────┘
│ │
▼ ▼
实时报表 深度分析
实时告警 历史分析
实时仪表盘 BI 大屏
5.2 方案分工
| 场景 |
推荐方案 |
理由 |
| 实时交易 + 实时报表 |
TiDB HTAP |
事务与分析一体化,数据实时可见 |
| 历史数据深度分析 |
ClickHouse |
列式压缩极致,聚合性能优异 |
| 高基数实时聚合 |
TiDB TiFlash |
实时性 + JOIN 能力 |
| PB 级离线分析 |
ClickHouse |
压缩比高,存储成本更低 |
| 需要实时 JOIN 的分析 |
TiDB |
原生 JOIN 优化器优势 |
FAQ
Q1:TiDB 的 TiFlash 和 ClickHouse 的列存引擎有什么本质区别?
TiFlash 基于 Raft Learner 角色,从 TiKV 异步同步数据,保持与行存的数据一致性,并通过 MPP 模式执行分布式查询。ClickHouse 的 MergeTree 引擎是独立的列式存储,数据需要从外部导入。TiFlash 侧重"实时的分析一致性",ClickHouse 侧重"极致的聚合吞吐"。
Q2:10 亿级数据量下 TiDB TiFlash 的查询性能能否满足实时 BI 需求?
在 10 亿行级别的数据量下,TiDB TiFlash 在单表聚合查询中的首次执行时间通常在 2-5 秒,缓存命中后可降至 1 秒以内,满足大多数实时 BI 场景的需求。对于需要亚秒级响应的超大规模聚合场景,可以考虑增加 TiFlash 节点或结合 ClickHouse 处理。
Q3:ClickHouse 不支持事务,如何在需要数据一致性的场景中使用?
ClickHouse 本身不支持事务,在需要严格一致性的场景中,建议将 ClickHouse 作为分析查询的副本使用,源数据仍然存储在支持事务的数据库(如 TiDB)中,通过 CDC 工具将数据增量同步到 ClickHouse,保持数据的最终一致性。
Q4:同时使用 TiDB 和 ClickHouse 会不会增加系统复杂度?
确实会增加一定复杂度,包括数据同步管道的维护、两套系统的运维管理。但通过 TiCDC 进行增量同步,可以简化同步链路。建议在数据量超过单系统能力边界、或业务需要兼具实时事务和极致分析的场景下再考虑组合方案。
总结
TiDB 和 ClickHouse 代表了大数据分析的两种技术路线:TiDB 的 HTAP 架构追求事务与分析的统一,适合需要实时数据新鲜度和 JOIN 能力的场景;ClickHouse 的专用 OLAP 架构追求极致的查询性能和存储效率,适合大规模离线分析和批量聚合场景。在 10 亿级数据量下,两者各有优势领域。
对于大多数需要"实时事务 + 实时分析"的业务场景,TiDB HTAP 是更简洁的选择;对于需要"极致分析性能 + 超大规模数据"的场景,ClickHouse 更具优势。两者也可以通过 TiCDC 组合使用,构建完整的实时 + 离线分析体系。
下一步行动
- 试用 TiDB HTAP 能力:在您的数据场景下体验 TiFlash 的实时分析能力,验证事务写入后的分析查询延迟。
→ TiDB 免费试用
- 获取 HTAP 实时分析方案:了解 TiDB 在金融、电商、SaaS 等行业的实时分析最佳实践。
→ TiDB HTAP 解决方案
- 申请分析场景 POC 测试:提供您的数据模型和查询场景,获取专属的性能测试报告。
→ 申请 POC 测试
相关资源