【Doris基础】Apache Doris 基本架构深度解析:从存储到查询的完整技术演进
目录
1 引言
2 Doris 架构全景图
2 核心组件技术解析
2.1 Frontend 层(FE)
2.2 Backend 层(BE)
3 数据存储与复制机制
3.1 存储架构演进
3.2 副本复制策略
4 查询处理全流程解析
4.1 查询生命周期
5 高可用设计
5.1 FE高可用架构
5.2 BE故障恢复
6 总结
1 引言
Apache Doris作为一款基于MPP架构的高性能实时分析数据库,凭借其极速的OLAP查询能力和简单易用的特性,在大数据领域获得了广泛应用。
2 Doris 架构全景图

- 三层服务架构:由Frontend(FE) 集群和Backend(BE) 集群构成计算存储分离架构,通过Broker实现外部数据源访问
- 元数据双环路:FE Master主导元数据变更,Follower通过Paxos协议保证强一致性,Observer提供只读扩展
- 数据分片机制:采用动态分片(Tablet)设计,每个分片包含多个Rowset实现增量更新
- 存储引擎:采用列式存储格式,支持多种索引结构(Zone Map、Bloom Filter)
- 计算引擎:基于LLVM的向量化执行引擎,支持Pipeline执行模式
2 核心组件技术解析
2.1 Frontend 层(FE)
角色定位:作为系统的"大脑",承担元数据管理、查询计划生成、用户访问控制等核心职责,采用 Shared-Nothing 架构实现水平扩展关键模块:
- Catalog Manager:存储表结构、分区信息、分片位置等元数据,通过多版本控制(MVCC)保证事务一致性,采用两阶段提交协议管理Schema变更
- Query Planner:将SQL解析为逻辑计划,通过CBO(基于成本的优化器)生成物理执行计划,优化策略包括:
- 谓词下推(Predicate Pushdown)
- 分区剪枝(Partition Pruning)
- 动态分区裁剪(Dynamic Partition Pruning)
- Coordinator:负责将物理计划拆分为多个Fragment,通过Pipeline调度机制分配给BE执行,支持自适应执行,可根据集群负载动态调整并行度
2.2 Backend 层(BE)
角色定位:作为数据存储和计算的核心载体,采用混合架构设计:
- 存储层:基于LSM-Tree思想实现的高效列存引擎
- 计算层:支持Pipeline执行模式的向量化引擎
关键特性:
- 数据分片(Tablet):物理存储的最小单元,每个Tablet包含多个Rowset(不可变数据块),支持自动数据均衡和副本迁移
- 智能索引:
- Zone Map:记录每个数据块的最大/最小值,实现快速范围查询过滤
- Bloom Filter:加速点查性能,减少不必要的IO
- 倒排索引:对高基数列建立索引,支持快速存在性判断
- 向量化执行:通过SIMD指令集优化,将单条记录处理升级为批量处理,典型场景性能提升3-5倍
3 数据存储与复制机制
3.1 存储架构演进

存储流程:
- 写入数据首先进入内存MemTable
- 达到阈值后转为Immutable Rowset
- 通过BaseCompaction生成不可变的Base Rowset
- 增量数据写入Delta Rowset
- 定期执行Cumulative Compaction合并增量数据
3.2 副本复制策略
- 多副本存储:默认3副本,支持自定义副本数
- Paxos协议:FE层通过Multi-Paxos保证元数据一致性
- Quorum机制:数据写入需要多数派副本确认,确保强一致性
- 副本修复:通过异步复制和 Checksum 校验自动修复损坏副本
4 查询处理全流程解析
4.1 查询生命周期

查询解析阶段:
- 语法解析生成AST
- 语义检查验证表/列存在性
- 生成逻辑执行计划
优化阶段:
- 统计信息收集(行数、Distinct值等)
- 代价模型选择最优执行路径
- 生成物理执行计划(包含Scan、Shuffle、Aggregate等Operator)
执行阶段:
- BE执行Pipeline计算
- 通过网络交换中间结果(Shuffle)
- FE进行最终结果聚合
5 高可用设计
5.1 FE高可用架构
- 三节点部署:1个Master + 2个Follower
- 脑裂防护:通过租约机制防止双Master
- 元数据备份:支持定期快照到远程存储
5.2 BE故障恢复
- 副本迁移:自动检测故障节点,触发副本复制
- 负载均衡:通过均衡器自动迁移热点分片
- 隔离机制:支持按照机房、机架维度部署副本
6 总结
Apache Doris通过创新的MPP架构设计,在存储层实现了高效的列式存储与智能索引,在计算层构建了高性能的向量化执行引擎,配合完善的副本机制和高可用设计,形成了完整的现代数据仓库解决方案。其架构设计充分体现了"极致性能"与"简单易用"的平衡哲学,为大数据分析场景提供了强有力的技术支撑。
相关文章:

【Doris基础】Apache Doris 基本架构深度解析:从存储到查询的完整技术演进
目录 1 引言 2 Doris 架构全景图 2 核心组件技术解析 2.1 Frontend 层(FE) 2.2 Backend 层(BE) 3 数据存储与复制机制 3.1 存储架构演进 3.2 副本复制策略 4 查询处理全流程解析 4.1 查询生命周期 5 高可用设计 5.1 F…...

程序人生-hellohelloo
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信 学 号 2023111976 班 级 23L0504 学 生 孙恩旗 指 导 教 师 刘宏伟 计算机科…...

ASP.NET Core SignalR的基本使用
文章目录 前言一、SignalR是什么?在 ASP.NET Core 中的关键特性:SignalR 工作原理简图: 二、使用步骤1.创建ASP.NET Core web Api 项目2.添加 SignalR 包3.创建 SignalR Hub4.配置服务与中间件5.创建控制器(模拟服务器向客户端发送消息)6.创建…...

【C语言】讲解 程序分配的区域(新手)
目录 代码区 数据区 堆区 栈区 常量区 重点比较一下堆区与 栈区 总结: 前言: C语言程序的内存分配区域是理解其运行机制的重要部分。根据提供的多条证据,我们可以总结出C语言程序在运行时主要涉及以下五个关键内存区域: 代…...
【脚本 完全参数化的通用 APT 源配置方案-Debian/Ubuntu】
通过脚本在 Debian/Ubuntu 系统上一键切换 APT 源 如Dockerfile中 使用某个源(比如 aliyun) 假设你的目录结构是: . ├── Dockerfile └── switch-apt-source.shFROM ubuntu:22.04# 把脚本拷贝到镜像中 COPY switch-apt-source.sh /us…...
数据集笔记:SeekWorld
提出了一项新任务:地理定位推理(Geolocation Reasoning) 该任务要求模型在感知视觉信息的同时,推理出图像中视觉语义所隐含的高级逻辑关系,从而确定图像的拍摄地点 TheEighthDay/SeekWorld at main 构建了一个基于规则…...

LeetCode 算 法 实 战 - - - 移 除 链 表 元 素、反 转 链 表
LeetCode 算 法 实 战 - - - 移 除 链 表 元 素、反 转 链 表 第 一 题 - - - 移 除 链 表 元 素方 法 一 - - - 原 地 删 除方 法 二 - - - 双 指 针方 法 三 - - - 尾 插 第 二 题 - - - 反 转 链 表方 法 一 - - - 迭 代方 法 二 - - - 采 用 头 插 创 建 新 链 表 总 结 &a…...
Jenkins实践(10):pipeline构建历史展示包名和各阶段间传递参数
Jenkins实践(10):构建历史展示包名和pipeline各阶段间传递参数 1、构建历史展示包名 参考:https://blog.csdn.net/fen_fen/article/details/148167868 1.1、方法说明 Jenkins版本:Jenkins2.452 通过修改 currentBuild.displayName 和 currentBuild.description 实现: …...
从头认识AI-----循环神经网络(RNN)
前言 前面我们讲了传统的神经网络,如MLP、CNN,这些网络中的输入都被单独处理,没有上下文之间的信息传递机制,这在处理序列数据(如语音、文本、时间序列)时很鸡肋: 如何理解一句话中“前后文”的…...
配置远程无密登陆ubuntu服务器时无法连接问题排查
配置远程无密登陆ubuntu服务器时无法连接问题排查 登陆端排查服务器端登陆排查 登陆端排查 ssh -v 用户名Ubuntu服务器IP可能日志输出 debug1: Authentications that can continue: publickey,password服务器端登陆排查 sudo tail -f /var/log/auth.log可能日志输出 Authen…...
5.31 数学复习笔记 22
前面的笔记,全部写成一段,有点难以阅读。现在改进一下排版。另外,写笔记实际上就是图一个放松呢,关键还是在于练习。 目前的计划是,把讲义上面的高数例题搞清楚之后,大量刷练习册上面的题。感觉不做几本练…...

kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)
1.核心概念与架构 1.1.消费者与消费者组 Kafka消费者是订阅主题(Topic)并拉取消息的客户端实例,其核心逻辑通过KafkaConsumer类实现。消费者组(Consumer Group)是由多个逻辑关联的消费者组成的集合。 核心规则 同一…...

鸿蒙 Form Kit(卡片开发服务)
Form Kit(卡片开发服务) 鸿蒙应用中,Form / Card / Widget 都翻译为“卡片” Form Kit(卡片开发服务)提供一种界面展示形式,可以将应用的重要信息或操作前置到服务卡片,以达到服务直达、减少跳转…...

算力卡上部署OCR文本识别服务与测试
使用modelscope上的图像文本行检测和文本识别模型进行本地部署并转为API服务。 本地部署时把代码中的检测和识别模型路径改为本地模型的路径。 关于模型和代码原理可以参见modelscope上这两个模型相关的页面: iic/cv_resnet18_ocr-detection-db-line-level_damo iic…...

KWIC—Implicit Invocation
KWIC—Implicit Invocation ✏️ KWIC—Implicit Invocation 文章目录 KWIC—Implicit Invocation📝KWIC—Implicit Invocation🧩KWIC🧩核心组件🧩ImplementationScheme⚖️ 隐式调用 vs 显式调用对比 🌟 总结 &#x…...

Visual Studio 2022 发布独立的 exe 文件
我们在用 Visual Studio 2022 写好一个 exe 程序之后,如果想把这个拿到其他地方运行,需要把 exe 所在的文件夹一起拿过去。 编译出来的 exe 文件需要其他几个文件一同放在同一目录才能运行,原因在于默认情况下,Visual Studio 是把…...

11.4java语言执行浅析4
编译成字节码(.class 文件) 使用 javac 命令将源代码编译为 Java 字节码(bytecode) 它不是机器码,而是 JVM 能理解的中间语言(字节码),具有平台无关性。 编译过程简要࿱…...
Excel 操作 转图片,转pdf等
方式一 spire.xls.free(没找设置分辨率的方法) macOs开发Java GUI程序提示缺少字体问题解决 Spire.XLS:一款Excel处理神器_spire.xls免费版和收费版的区别-CSDN博客 官方文档 Spire.XLS for Java 中文教程 <dependency><groupI…...
说说 Kotlin 中的 Any 与 Java 中的 Object 有何异同?
在 Kotlin 中 Any 类型和 Java 中的 Object 类都是所有类型的根类型。 1 基本定义 Kotlin 中的 Any 和 Any?: Any:是所有非空类型的根类型;Any?:是所有可空类型的根类型; Java 中的 Object: 是所有类…...

python分配方案数 2023年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
python分配方案数 2023全国青少年信息素养大赛Python编程挑战赛复赛真题解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...

《信号与系统》第 5 章 离散时间傅里叶变换
5.0 引言 这一章将介绍并研究离散时间傅里叶变换,这样就完整地建立了傅里叶分析方法。 5.1 非周期信号的表示:离散时间傅里叶变换 5.1.1 离散时间傅里叶变换的导出 在第4章看到:一个连续时间周期方波的傅里叶级数可以看成一个包络函数的采…...

动态IP与区块链:重构网络信任的底层革命
在数字经济蓬勃发展的今天,网络安全与数据隐私正面临前所未有的挑战。动态IP技术与区块链的深度融合,正在构建一个去中心化、高可信的网络基础设施,为Web3.0时代的到来奠定基础。 一、技术碰撞:动态IP与区块链的天然契合 动态I…...
目前主流图像分类模型的详细对比分析
以下是目前主流图像分类模型的详细对比分析,结合性能、架构特点及应用场景进行整理: 一、主流模型架构分类与定量对比 模型名称架构类型核心特点ImageNet Top-1准确率参数量(百万)计算效率典型应用场景ResNetCNN残差连接解决梯度…...

uniapp使用Canvas生成电子名片
uniapp使用Canvas生成电子名片 工作中有生成电子名片的一个需求,刚刚好弄了发一下分享分享 文章目录 uniapp使用Canvas生成电子名片前言一、上代码?总结 前言 先看效果 一、上代码? 不对不对应该是上才艺,哈哈哈 <template…...

世冠科技亮相中汽中心科技周MBDE会议,共探汽车研发数字化转型新路径
近日,中汽中心2025年科技周MBDE前沿应用主题会议在天津成功举办。本次会议以“智汇津门共探MBDE前沿应用新征程”为主题,聚焦基于模型的数字工程(MBDE)方法论在汽车复杂系统研发中的创新实践与跨领域协同,旨在推动行业…...

Linux笔记---线程
1. 线程的介绍 1.1 线程的概念 基本定义: 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程(Process)之中(或者说是进程的一部分、对进程的划分),是进程中的实际…...

MCP架构深度解析:从基础原理到核心设计
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...
【监控】pushgateway中间服务组件
Pushgateway 是 Prometheus 生态中的一个中间服务组件,以独立工具形式存在,主要用于解决 Prometheus 无法直接获取监控指标的场景,弥补其定时拉取(pull)模式的不足。 其用途如下: 突破网络限制࿱…...

数据库暴露--Get型注入攻击
1.背景知识 1.1Post、Get的对比 特性GET 方法POST 方法HTTP 方法类型GETPOST数据位置URL 查询字符串(?key=value)请求体(Request Body)数据可见性明文显示在 URL 和浏览器历史中不可见(除非开发者工具查看)数据长度限制受 URL 长度限制(通常约 2048 字符)无明确限制(…...

AI炼丹日志-26 - crawl4ai 专为 AI 打造的爬虫爬取库 上手指南
点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…...