Karp 的技术博客

一、Apache Doris 是什么?

Apache Doris(原名 Palo,由百度开源)是一款现代化的 MPP(大规模并行处理)分析型数据库,专为实时数据分析场景设计。它基于 Google Mesa 论文的思想演进而来,是目前国内使用最广泛的 OLAP(联机分析处理)数据库之一。

核心特性

  • 高性能 OLAP:基于列式存储 + 向量化执行引擎,聚合查询极速
  • 实时数据写入:支持秒级数据摄入,写入即可见
  • 标准 SQL:兼容 MySQL 协议,降低迁移成本
  • 弹性架构:FE(前端)+ BE(后端)分离,水平扩展能力强
  • 丰富的数据模型:Aggregate、Unique、Duplicate 三种模型覆盖多种场景
  • 多表物化视图:自动命中,加速复杂查询
  • 湖仓一体:通过 Catalog 直接查询 Hive、Iceberg、Hudi 等数据湖

典型应用场景

场景说明
实时报表业务大盘、用户行为分析
广告数据分析点击率、转化漏斗等多维分析
日志分析海量日志检索与统计
数据中台统一数据分析服务层
湖仓联邦查询不移动数据,直接分析数据湖

二、三者的本质定位

在对比之前,首先明确三者的设计定位,这是理解一切差异的根源:

MySQL       →  OLTP 事务型数据库(联机事务处理)
TiDB        →  HTAP 混合负载数据库(事务 + 分析兼顾)
Apache Doris →  OLAP 分析型数据库(联机分析处理)
一句话总结:MySQL 管事务,Doris 管分析,TiDB 想两者兼顾。

三、架构对比

MySQL 架构

MySQL 采用单机主从架构(或集群),以行式存储为核心,围绕 InnoDB 引擎构建 ACID 事务能力。

Client → MySQL Server
           ├── 查询解析器
           ├── 查询优化器
           └── InnoDB 存储引擎(行式存储 + B+Tree 索引)
                └── 主从复制(异步/半同步)

水平扩展:依赖 ShardingSphere、Vitess 等中间件,原生能力弱。


TiDB 架构

TiDB 是受 Google Spanner/F1 启发的分布式 HTAP 数据库,由三个核心组件构成:

Client
  ↓
TiDB Server(无状态计算层,兼容 MySQL 协议)
  ↓
PD(Placement Driver,元数据管理 + 调度中心)
  ↓
┌──────────────────────────────────┐
│  TiKV(行式存储,OLTP 事务)     │
│  TiFlash(列式副本,OLAP 加速)  │
└──────────────────────────────────┘

TiKV 使用 Raft 协议保证多副本一致性,TiFlash 是 TiKV 的列式存储副本,实现 HTAP。


Apache Doris 架构

Doris 采用 FE + BE 两层架构,无 ZooKeeper 依赖,运维简单:

Client(MySQL 协议)
  ↓
FE(Frontend 前端节点)
  ├── SQL 解析 & 查询规划
  ├── 元数据管理(Catalog)
  └── Leader / Follower 高可用

  ↓(查询计划下发)

BE(Backend 后端节点)× N
  ├── 列式存储(Segment 文件)
  ├── 向量化执行引擎
  └── 本地 Compaction

MPP 并行执行:查询被切分成多个 Fragment,分布在所有 BE 节点并行执行,充分利用多机算力。


四、核心维度对比

4.1 存储引擎

维度MySQLTiDBApache Doris
存储格式行式(InnoDB)行式(TiKV)+ 列式(TiFlash)纯列式(Segment)
索引结构B+ TreeLSM-Tree前缀索引 + ZoneMap + Bloom Filter
压缩比一般较好(LZ4/Zstd)极高(列式压缩 3-10x)
数据模型通用通用Aggregate / Unique / Duplicate

4.2 事务能力

维度MySQLTiDBApache Doris
ACID 事务完整支持完整支持(分布式 2PC)单表事务,有限支持
隔离级别RC / RR / SerializableSI(快照隔离)/ RC无严格事务隔离
适合场景高并发小事务高并发事务 + 分析批量写入 + 大规模查询
⚠️ 注意:Doris 不适合作为在线事务系统的主库,事务能力是其短板。

4.3 查询性能

场景MySQLTiDBApache Doris
点查(PK lookup)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
小范围查询⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
聚合统计(COUNT/SUM/AVG)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
多表 JOIN 分析⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
亿级数据全表扫描⭐⭐⭐⭐⭐⭐⭐
实时写入并发⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

4.4 扩展能力

维度MySQLTiDBApache Doris
水平扩展弱(需中间件)原生(自动分片)原生(扩 BE 节点)
存算分离不支持部分支持支持(新版本)
最大数据量TB 级(单机)PB 级PB 级
节点故障恢复主从切换(秒-分钟)自动 Raft 切换(秒级)FE/BE 自动恢复

4.5 生态与兼容性

维度MySQLTiDBApache Doris
SQL 兼容MySQL 标准MySQL 8.0 兼容MySQL 协议兼容
数据接入标准 SQLBinlog / Kafka / FlinkBroker Load / Flink / Kafka
数据湖集成强(Hive/Iceberg/Hudi/Delta)
BI 工具广泛支持广泛支持广泛支持
国产化适配一般良好优秀(SelectDB 商业版)

五、Doris 的三种数据模型

这是 Doris 区别于传统数据库的重要特性,按需选择模型可大幅提升性能:

Aggregate 模型(聚合模型)

  • 适用:数据本身就是聚合结果,如 PV/UV 统计表
  • 原理:写入时自动对相同 Key 的数据进行预聚合(SUM/MAX/MIN/REPLACE)
  • 优势:查询无需实时计算,速度极快
CREATE TABLE user_stats (
    user_id     BIGINT,
    date        DATE,
    pv          BIGINT SUM DEFAULT "0",    -- 自动累加
    uv          BIGINT REPLACE DEFAULT "0" -- 取最新值
) AGGREGATE KEY(user_id, date)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;

Unique 模型(主键模型)

  • 适用:有主键更新需求,如订单状态更新
  • 原理:相同 Key 的新数据替换旧数据(Upsert 语义)
  • 优势:保证主键唯一性,适合 CDC 场景
CREATE TABLE orders (
    order_id    BIGINT,
    status      VARCHAR(20),
    amount      DECIMAL(10,2),
    update_time DATETIME
) UNIQUE KEY(order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 16;

Duplicate 模型(明细模型)

  • 适用:原始日志存储,保留所有明细数据
  • 原理:不做任何预处理,完整保留每条记录
  • 优势:灵活,适合 Ad-hoc 查询
CREATE TABLE access_log (
    ts          DATETIME,
    user_id     BIGINT,
    page        VARCHAR(255),
    duration_ms INT
) DUPLICATE KEY(ts, user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 32;

六、典型选型指南

问题:我该用哪个?

是否需要强事务(转账、下单)?
  ├── 是 → MySQL(小数据量)或 TiDB(大数据量/高并发)
  └── 否 → 下一步

数据量是否超过单机 MySQL 瓶颈(TB 级以上)且以分析查询为主?
  ├── 是 → Apache Doris
  └── 数据量不大但需要复杂分析 → Doris 或 ClickHouse

是否需要事务 + 分析混合负载,且不想维护两套系统?
  └── TiDB(HTAP,但分析性能略弱于 Doris)

常见架构组合

方案一:MySQL + Doris(最常见)

业务系统 → MySQL(事务写入)
              ↓ Flink CDC / DataX 同步
           Doris(分析查询)← BI 报表 / 数据大屏

方案二:Kafka + Doris(实时分析)

埋点/日志 → Kafka → Flink → Doris Routine Load
                                    ↓
                              实时数据大盘

方案三:TiDB 独立承担 HTAP

业务系统 → TiDB(TiKV 处理事务)
               ↓ 自动同步到 TiFlash
          TiFlash(分析查询)← BI 报表

七、性能基准参考

以 TPC-H 100GB 测试集为参考(不同环境结果有差异):

查询类型MySQL 8.0TiDB + TiFlashApache Doris
Q1(聚合)> 300s~15s~2s
Q6(过滤聚合)> 200s~10s~1s
Q18(多表 JOIN)超时~45s~8s
并发写入(万行/秒)50+30+10-20
数据仅供参考,实际性能受硬件、数据分布、SQL 复杂度等多种因素影响。

八、总结

选型维度推荐
在线事务,小数据量MySQL
在线事务,大数据量/高并发TiDB
实时数据分析,大规模报表Apache Doris
事务+分析都要,接受一定妥协TiDB(HTAP 模式)
极致分析性能,纯 OLAPApache Doris

Apache Doris 并不是要替代 MySQL 或 TiDB,而是在数据分析领域提供了 MySQL 无法企及的能力。三者在现代数据架构中往往是互补关系,组合使用才能发挥最大价值。


参考资料

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2026年04月03日 15:34
0

目录

来自 《 Apache Doris 深度解析:与 MySQL、TiDB 的全面对比》