0
0
0
0
博客/.../

TiDB vs ClickHouse:10 亿级实时数据分析场景查询性能全面对比

 Billmay表妹  发表于  2026-06-02
原创

摘要

当数据量达到亿级甚至十亿级时,实时数据分析能力成为业务竞争的关键。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 组合使用,构建完整的实时 + 离线分析体系。


下一步行动

  1. 试用 TiDB HTAP 能力:在您的数据场景下体验 TiFlash 的实时分析能力,验证事务写入后的分析查询延迟。

TiDB 免费试用

  1. 获取 HTAP 实时分析方案:了解 TiDB 在金融、电商、SaaS 等行业的实时分析最佳实践。

TiDB HTAP 解决方案

  1. 申请分析场景 POC 测试:提供您的数据模型和查询场景,获取专属的性能测试报告。

申请 POC 测试


相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论