x

ClickHouse 与 Elasticsearch 对比分析

一、ClickHouse 详解

1.1 核心技术架构

列式存储(Columnar Storage)

ClickHouse 采用纯列式存储架构,数据按列而非按行组织存储。

存储结构:

文件类型 扩展名 作用
数据文件 .bin 存储列数据,使用压缩编码
标记文件 .mrk 记录列数据的偏移量,支持数据随机读取
主键索引 .idx 一级索引,用于快速定位数据块

核心优势:

行式存储: [Row1: id name amount date], [Row2: id name amount date], ...
ClickHouse列式: [id列: 1,2,3,...], [name列: a,b,c,...], [amount列: 100,200,300,...]
  1. I/O优化:查询只读取所需列,避免全表扫描

  2. 假设表有100列,查询只涉及3列 → 只读取3%的数据

  3. 高压缩率:同列数据类型一致,压缩效率高

  4. 常用压缩算法:LZ4(快速)、ZSTD(高压缩)、Delta(数值型)

  5. 典型压缩比:10:1 ~ 30:1

  6. 向量化执行:利用CPU SIMD指令并行处理列数据

  7. 单指令多数据操作,大幅提升聚合计算效率

MergeTree 引擎(核心)

MergeTree 是 ClickHouse 的核心表引擎,设计用于处理海量数据的高效写入和查询。

数据写入流程:

写入 → Part1 (有序) → Part2 (有序) → ... → 后台Merge → 大Part
     (小数据块)       (小数据块)           (合并优化)

核心机制:

  1. 数据分区(Partition):数据按分区键分组,支持分区裁剪
  2. 排序键(ORDER BY):数据在磁盘上按排序键顺序存储
  3. 数据 Parts:数据被分割成独立的 parts,每个 part 内部有序

分区设计示例:

CREATE TABLE orders (
    order_id   String,
    product_id String,
    amount     Decimal(10,2),
    created_at DateTime
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(created_at)  -- 按月分区
ORDER BY (product_id, created_at)   -- 商品+时间复合排序

数据类型体系

类型 范围/精度 存储大小
Int8/16/32/64 -2^n-1 ~ 2^n-1-1 1~8字节
UInt8/16/32/64 0 ~ 2^n-1 1~8字节
Float32/64 IEEE 754 4/8字节
Date 1970-01-01 ~ 2106-02-07 2字节
DateTime 1970-01-01 ~ 2106-02-07 4字节
Decimal(18,2) 精确小数 9字节
String 任意长度 可变
UUID 128位 16字节
LowCardinality 大量重复值优化 高效

1.2 性能对比

ClickHouse vs MySQL

维度 ClickHouse MySQL 差异
单表亿级聚合 0.3秒 30-300秒 快100-1000x
压缩率 10-30:1 1-3:1 高10x
写入吞吐 50-100MB/s 1-5MB/s 快10-50x
跨年统计 <1秒 10-60秒
适用场景 OLAP分析 OLTP事务 各有所长

ClickHouse vs StarRocks

维度 ClickHouse StarRocks 说明
架构 本地存储 FE+BE分离 StarRocks更易扩展
SQL兼容 有限 MySQL协议 StarRocks更友好
更新支持 主键模型强 StarRocks胜
单表聚合 更强 接近 ClickHouse优
运维复杂度 较低 StarRocks更易用

1.3 优缺点

✅ 优点

  • 极致查询性能:列式存储+向量化执行,亿级数据秒级响应
  • 高压缩率:列式存储压缩效率高,存储成本降低70%+
  • 实时写入:写入即索引,高速批量写入
  • 水平扩展:支持千亿级数据规模
  • 丰富物化视图:多种 MergeTree 变种引擎

❌ 缺点

  • 事务支持弱:无真正ACID事务,不支持回滚
  • 更新删除性能差:普通 UPDATE/DELETE 是异步操作
  • SQL支持不完整:无存储过程,无触发器
  • 运维复杂:集群配置、副本管理门槛高
  • JOIN优化较弱:复杂多表关联不如专业OLAP

1.4 适用场景

场景 适用度 说明
日志分析 ⭐⭐⭐⭐⭐ 完美胜任
订单/出入库统计 ⭐⭐⭐⭐⭐ 极强,适合统计场景
实时监控大屏 ⭐⭐⭐⭐⭐ 秒级响应
用户行为分析 ⭐⭐⭐⭐⭐ 多维聚合极强
交易系统/订单更新 不适合(更新性能差)
强事务需求 不适合

1.5 中国用户案例

公司 规模 场景
字节跳动 数万台服务器 抖音日志分析,EB级数据
腾讯 数千台 微信数据、游戏分析
快手 数千节点 短视频推荐、直播分析
美团 - 实时数据看板
携程 - 用户行为分析

二、Elasticsearch 详解

2.1 核心技术架构

倒排索引(Inverted Index)

正向索引: 文档ID → 文档内容
倒排索引: 词(Term) → 文档ID列表

["华为","手机","性价比"] → [Doc1, Doc3, Doc7]
["苹果","手机","贵"]     → [Doc2, Doc5]

搜索"手机" → 直接返回 [Doc1, Doc2, Doc3, Doc5, Doc7]

核心特性:

  • 每个分片(Shard)是一个 Lucene 索引
  • Segment:数据分段,每段内有序
  • .tip/.doc/.tim 文件:倒排表、正向文档、词典
  • Segment 不可变,后台异步合并

分片机制

Index → 5个Shard(分片)
       ├── Shard 1 (主分片) + Shard 1 Replica
       ├── Shard 2 (主分片) + Shard 2 Replica
       └── ...

中文分词

  • IK Analyzer:最常用,支持细粒度和智能分词
  • ansj:基于 CRF 的中文分词
  • 结巴分词(jieba):简单高效

2.2 性能对比

维度 Elasticsearch MySQL 胜出
模糊搜索 极强(分词+倒排) LIKE极慢 ES
全文检索 弱(FULLTEXT有限) ES
精确查询 弱(倒排索引不是最优) 极强(B+Tree) MySQL
聚合统计 ⚠️ 中等(7.x后改进) 强(适合小数据) MySQL
水平扩展 极强 ES
维度 Elasticsearch ClickHouse 说明
搜索能力 极强 ES胜
聚合统计 中等 极强 ClickHouse胜
写入性能 中等 ClickHouse
数据量 适合TB级 适合PB级 ClickHouse

2.3 优缺点

✅ 优点

  • 全文搜索极强:中文分词(IK/ansj)支持
  • 模糊匹配精准:纠错、同义词展开
  • 水平扩展简单:新增节点自动负载均衡
  • RESTful API:易集成到各类系统
  • 近实时搜索:秒级数据可用

❌ 缺点

  • 聚合统计一般:不如 ClickHouse,特别是多维度聚合
  • 存储成本高:倒排索引占用空间大
  • 数据一致性弱:最终一致模型
  • 大数据量聚合慢:不适合 TB 级以上聚合分析

2.4 适用场景

场景 适用度 说明
全文搜索/模糊查询 ⭐⭐⭐⭐⭐ 完美胜任
商品搜索 ⭐⭐⭐⭐⭐ 适合商品模糊匹配
日志检索 ⭐⭐⭐⭐⭐ ELK 日志套件标配
订单统计 ⭐⭐ 不擅长(统计弱)
时序分析 ⭐⭐⭐ 可用但非最优

三、针对你的场景如何选择

需求分析

需求 数据量 特点
商品数据 近百万条 主要是查询分析
订单数据 日均万单,年百万级 统计为主
出入库数据 类似订单量级 统计为主
模糊查询 需要 商品名模糊匹配

推荐方案

┌─────────────────────────────────────────────────────┐
│                   你的需求                            │
├─────────────────────────────────────────────────────┤
│  商品模糊搜索    →  Elasticsearch ✅                │
│  订单统计/分析   →  ClickHouse ✅                    │
│  出入库统计      →  ClickHouse ✅                    │
│  主库(MySQL)    →  事务读写,完全隔离               │
└─────────────────────────────────────────────────────┘

方案一(经济型):只读实例 + ES(商品搜索)

[腾讯云MySQL主库]  [只读实例]  简单分析查询
                  [CDC同步]   [ClickHouse]  订单/出入库统计
                              [Elasticsearch]  商品模糊搜索

方案二(极简型):只读实例撑住(先跑起来)

  • 商品搜索:用 MySQL 的 LIKEFULLTEXT(数据量百万内勉强能跑)
  • 订单统计:先用只读实例,按月分区查询
  • 后续再按需加 ClickHouse

方案三(推荐长期最优):只读实例 + ClickHouse + ES

数据 存储 用途
商品表 ClickHouse + ES 统计 + 模糊搜索
订单表 ClickHouse 订单统计
出入库表 ClickHouse 统计
MySQL主库 腾讯云CDB 事务读写

四、成本估算(腾讯云)

组件 配置 月费用(参考)
MySQL只读实例 1核2G ~60元
ClickHouse(自建) 4核8G 500G SSD ~300元
Elasticsearch 2核4G 200G ~400元
总计 - ~760元/月

五、总结

维度 ClickHouse Elasticsearch
核心定位 分析型数据库 搜索引擎
最强项 大数据量聚合统计 全文搜索/模糊匹配
订单统计 极擅长 ❌ 不擅长
商品搜索 ⚠️ 一般 极擅长
数据量承受能力 PB级 TB级
推荐指数 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐

针对你的需求:如果只能选一个,优先选 ClickHouse(订单统计是核心);如果预算允许,加一个 ES 做商品搜索

六、关键技术参数参考

ClickHouse 核心配置

-- 表引擎配置
ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (id, date)
SETTINGS index_granularity = 8192;

-- 核心配置 (config.xml)
<max_threads>16</max_threads>
<max_memory_usage>10000000000</max_memory_usage>
<use_uncompressed_cache>1</use_uncompressed_cache>

Elasticsearch 分片配置

{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1,
    "analysis": {
      "analyzer": {
        "ik": {
          "type": "ik",
          "path": "ik"
        }
      }
    }
  }
}

文章生成时间:2026年4月30日

Left-click: follow link, Right-click: select node, Scroll: zoom
x