面试被问:MySQL 与 Doris/SelectDB 的架构区别。 大数据为什么禁止select *。

摘要:本文从架构设计、存储模型、执行引擎等维度,对比 MySQL 与 Doris/SelectDB 的核心差异,清晰解释大数据场景为何需要专用 OLAP 数据库,以及这类数据库更快的根本原因,并重点说明大数据场景下严禁 `select *` 的底层逻辑。

一、MySQL 标准架构(OLTP 型)

MySQL 是面向联机事务处理设计的关系型数据库,整体为集中式架构,所有核心模块运行在单机或主从节点上。

复制代码

┌─────────────────────────────────────┐ │ MySQL 核心架构 │ ├─────────────────────────────────────┤ │ 连接管理 & 权限校验 │ ├─────────────────────────────────────┤ │ SQL 解析 → 语法检查 → 查询优化器 │ ├─────────────────────────────────────┤ │ 存储引擎抽象接口 │ ├─────────────────────────────────────┤ │ InnoDB 行存储 │ BufferPool 缓冲池 │ │ B+ 树索引 │ MVCC 事务机制 │ ├─────────────────────────────────────┤ │ 本地磁盘存储 │ └─────────────────────────────────────┘

MySQL 核心特点

  • 存储模式:行式存储,适合单行点查询、单行更新

  • 架构模式:单机 / 主从复制,依赖垂直扩容

  • 事务能力:强 ACID、行锁、表锁、MVCC

  • 索引结构:B+ 树为主,对等值查询极快

  • 适用规模:GB ~ 中等 TB 级数据

  • 典型场景:订单系统、用户中心、支付交易等业务库

二、Doris / SelectDB 架构(OLAP 型)

Doris(SelectDB 为其商业化发行版)是面向海量数据分析的分布式 MPP 数据库,整体分为 FE 与 BE 两层,可水平无限扩展。

复制代码

┌─────────────────────────────────────────┐ │ Doris 分布式架构 │ ├─────────────────────────────────────────┤ │ FE 前端节点集群 │ │ • Leader:元数据、SQL 解析、计划生成 │ │ • Follower:高可用、故障选主 │ │ • Observer:只读查询、分担压力 │ ├─────────────────────────────────────────┤ │ BE 后端节点集群 │ │ • 数据分区 + 分桶分布式存储 │ │ • 列式存储 + 高比例压缩 │ │ • 向量化执行引擎 │ │ • 多副本高可用机制 │ ├─────────────────────────────────────────┤ │ MPP 大规模并行计算 │ └─────────────────────────────────────────┘

Doris 核心特点

  • 存储模式:列式存储,只读取需要的字段

  • 架构模式:分布式 MPP,存算一体,水平扩容

  • 执行引擎:向量化执行,CPU 批量处理数据

  • 索引体系:前缀索引、分区裁剪、布隆过滤器、位图索引

  • 适用规模:TB ~ PB 级海量数据

  • 典型场景:实时大屏、BI 报表、用户画像、大表聚合分析

三、MySQL vs Doris/SelectDB 核心对比表

对比维度 MySQL Doris / SelectDB
架构类型 单机 / 主从,垂直扩展 分布式 MPP,水平扩展
存储结构 行存储 列存储
核心定位 OLTP 事务、点查询 OLAP 分析、大表聚合、多维统计
数据量级 GB ~ 中等 TB TB ~ PB 级
执行方式 逐行标量执行 向量化批量执行
扩展能力 弱,分库分表复杂 强,加节点即可线性提升性能
事务一致性 强 ACID 最终一致性,侧重高吞吐写入
典型查询延迟 毫秒级点查 亚秒 ~ 秒级海量数据分析

四、为什么大数据必须使用专用数据库?

1. 数据量级完全不同

  • MySQL 设计基于单机资源,数据达到 TB 级后查询严重卡顿

  • 大数据场景数据量可达 PB 级,必须分布式分片存储与并行计算

2. 查询模式完全不同

  • MySQL:高频、简单、单行查询
复制代码

SELECT * FROM user WHERE id = 10086;

  • Doris:复杂、批量、全表/大分区聚合查询
复制代码

SELECT region, goods_type, SUM(amount) FROM order_detail WHERE dt BETWEEN '2024-01-01' AND '2024-12-31' GROUP BY region, goods_type;

3. 行存储不适合大数据分析

行存储必须读取整行数据,哪怕只用到一个字段,造成巨大 IO 浪费。 列存储只加载需要的列,IO 可减少 80%~95%

五、Doris/SelectDB 为什么在大数据下更快?

1. 列式存储 + 高压缩

同类型列压缩比极高(5:1 ~ 15:1),大幅降低磁盘 IO、网络 IO。

2. MPP 分布式并行计算

大表被切分为多个分片,多节点同时计算,最后汇总结果,算力随节点线性提升。

3. 向量化执行引擎

抛弃逐行处理,采用 CPU SIMD 指令批量计算,执行效率提升 3~10 倍。

4. 多层索引快速过滤

分区裁剪、前缀索引、布隆过滤器、位图索引联合使用,实现能不扫的数据坚决不扫

六、为什么大数据场景严禁 `select *`?

1. 废掉列存储核心优势

列存价值 = 按需取列 `select *` = 强制读取所有列 = 退化为低效行存储

2. IO 与网络流量爆炸

  • 磁盘 IO 暴增

  • 节点间数据传输暴增

  • 内存占用飙升

查询从秒级变分钟级,甚至拖垮整个集群。

3. 无意义消耗集群资源

大量不需要的字段参与扫描、传输、反序列化,完全浪费 CPU、内存、网络资源。

正确写法示例

复制代码

-- 严禁 select * from order_detail where dt = '2025-03-22'; -- 推荐 select user_id, pay_amount, create_time from order_detail where dt = '2025-03-22' group by user_id;

七、总结

  1. MySQL 擅长事务,Doris 擅长分析,二者不是替代关系,而是业务架构互补。

  2. 大数据专用数据库更快,源于分布式 MPP + 列存储 + 向量化执行三大核心架构优势。

  3. 大数据开发第一准则:严禁 `select *`,否则再强的 OLAP 引擎也会被拖垮。

  4. 企业通用最佳实践:MySQL 承载业务 + Doris 构建实时数仓 / BI 报表

相关推荐
ShineWinsu6 小时前
对于C++:auto_ptr、unique_ptr、shared_ptr的模拟实现
c++·面试·笔试·智能指针·unique_ptr·shared_ptr·auto_ptr
张洛闻Eren6 小时前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
ltl7 小时前
架构评估:ATAM 与 trade-off 分析实战
架构
mldong7 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
布莱克6058 小时前
理解索引:从概念到实践
数据库·mysql
黄敬峰9 小时前
一文搞懂 NestJS 后端框架:工厂模式、模块化与装饰器
面试
码匠许师傅10 小时前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试
kyriewen10 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
g105655913910 小时前
LAMP博客平台Wordpress实战
android·mysql·nginx·php
这个DBA有点耶11 小时前
数据库迁移怎么做到“零翻车“:金仓 KDMS/KDTS/KFS 工具链实测
数据库·架构·dba