【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架构设计,在存储层实现了高效的列式存储与智能索引,在计算层构建了高性能的向量化执行引擎,配合完善的副本机制和高可用设计,形成了完整的现代数据仓库解决方案。其架构设计充分体现了"极致性能"与"简单易用"的平衡哲学,为大数据分析场景提供了强有力的技术支撑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光电赋能低空场景,灵途科技助力无人机持续升级

2025 UASE 主题为“步入低空经济新时代”的“2025第九届世界无人机大会暨国际低空经济与无人系统博览会/第十届深圳国际无人机展览会”5月23日在深圳会展中心隆重开幕。本届展会汇聚了全球800余家企业参展,展示5000多款无人机及系统设备,全面呈现低空经…

iOS QQ抽屉式导航的实现

QQ个人中心的侧滑功能(通常称为"抽屉式导航")可以通过以下几种方式在iOS中实现: 主要实现方案 使用第三方库 最快速的方式是使用成熟的第三方库: SWRevealViewController:最流行的侧滑菜单库MMDrawerController:另一…

【Pandas】pandas DataFrame drop

Pandas2.2 DataFrame Reindexing selection label manipulation 方法描述DataFrame.add_prefix(prefix[, axis])用于在 DataFrame 的行标签或列标签前添加指定前缀的方法DataFrame.add_suffix(suffix[, axis])用于在 DataFrame 的行标签或列标签后添加指定后缀的方法DataFram…

长短期记忆网络 (LSTM) 详解:从原理到应用

一、引言:序列数据处理的挑战​ 在自然语言处理、语音识别、时间序列分析等领域,数据通常以序列形式存在,前后数据点之间存在依赖关系。传统循环神经网络 (RNN) 虽然能捕捉序列依赖,但存在严重的梯度消失 / 爆炸问题,…

三天掌握PyTorch精髓:从感知机到ResNet的快速进阶方法论

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 一、分析式AI基础与深度学习核心概念 1.1 深度学习三要素 数学基础: f(x;W,b)σ(Wxb)(单层感知机) 1.2 PyTorch核心组件 张量操作示例…

Linux操作系统概述

一、操作系统的作用 1、五大基本功能 (1)进程和线程的管理:进程线程的状态、控制、同步互斥、通信调度等 (2)存储管理:分配/回收、地址转换、存储保护等 (3)文件管理:文件目录、文件操作、磁盘…

Python爬虫第22节- 结合Selenium识别滑动验证码实战

目录 一、引言 二、滑动验证码原理与反爬机制 2.1 验证码原理 2.2 反爬机制 三、工程实战:滑动验证码识别全流程 3.1 工程准备 3.1.1 环境依赖 3.1.2 目标网站与验证码识别案例 3.2 核心破解流程 3.2.1 自动化打开网页与登录 3.2.2 获取验证码图片&#…

NSSCTF-[NISACTF 2022]huaji?

下载附件得到文件 放到kali里面看看 发现是一张图片 用binwalk命令对其进行分离 发现需要密码 用010打开图片进行查看 对其进行解密 分别得到 ctf_NISA_2022 nisa_2022 发现ctf_NISA_2022是密码 得到flag NSSCTF{Nls_FumYEnnOjy}

nt!CcGetVacbMiss函数分析之设置好nt!_VACB然后调用函数nt!SetVacb

第一部分:MmMapViewInSystemCache函数返回 Status MmMapViewInSystemCache (SharedCacheMap->Section, &Vacb->BaseAddress, &NormalOffset, …

Uniapp+UView+Uni-star打包小程序极简方案

一、减少主包体积 主包污染源(全局文件依赖)劲量独立导入 componentsstaticmain.jsApp.vueuni.css 分包配置缺陷,未配置manifest.json中mp-weixin节点 "usingComponents" : true,"lazyCodeLoading" : "requiredC…

Teigha应用——解析CAD文件(DWG格式)Teigha在CAD C#二次开发中的基本应用

Teigha是一款专为开发者设计的工具,其核心技术在于强大的API和丰富的功能集,提供了一系列工具和方法,使开发者能够轻松地读取、解析和操作DWG文件。它支持多种操作系统,能在处理大型DWG文件时保持高效性能,还可用于构建…

JavaWeb:SpringBoot Bean管理

获取Bean Bean作用域 解决循环依赖方式 1.粗暴删除依赖 2.打破依赖配置 3.使用lazy注解 引入第三方Bean

Lua 脚本在 Redis 中的运用-23(Lua 脚本语法教程)

在 Redis 中编写和执行 Lua 脚本 Lua 脚本是在 Redis 中执行自定义逻辑的强大功能,可以直接在 Redis 服务器上执行。这减少了延迟,提高了性能,并能够实现客户端脚本难以或不可能实现的原子操作。通过在 Redis 中嵌入 Lua 脚本,您…

从零实现本地语音识别(FunASR)

FunASR 是达摩院开源的综合性语音处理工具包,提供语音识别(ASR)、语音活动检测(VAD)、标点恢复(PUNC)等全流程功能,支持多种主流模型(如 Paraformer、Whisper、SenseVoic…

deepseek开源资料汇总

参考:DeepSeek“开源周”收官,连续五天到底都发布了什么? 目录 一、首日开源-FlashMLA 二、Day2 DeepEP 三、Day3 DeepGEMM 四、Day4 DualPipe & EPLB 五、Day5 3FS & Smallpond 总结 一、首日开源-FlashMLA 多头部潜在注意力机制&#x…

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章将开启Qt的学习,Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位,因为它适合嵌入式和多种平台而被广泛使用…

AI应用 Markdown 渲染对比与原生实现方案

DeepSeek、豆包、腾讯元宝、ChatGPT 渲染实现对比表 产品解析方式渲染引擎/库UI 组件架构Markdown支持范围流程图/导图支持扩展架构及裁剪流式解析渲染DeepSeek原生解析(非WebView)采用 CommonMark 标准解析器(推测使用 Markwon 库&#xff…

Ubuntu20.04系统安装,使用系统盘安装

1、系统安装 Ubuntu20.04系统安装,使用系统盘安装 查看ubuntu系统版本 lsb_release -a:显示发行版名称、版本号及代号 (base) rootai-System-Product-Name:/media/ai/wh/clash-for-linux-master# lsb_release -a No LSB modules are available. Distri…

(自用)Java学习-5.19(地址管理,三级联动,预支付)

1. 地址管理模块 地址展示 前端:通过 showAddress() 发起 Ajax GET 请求,动态渲染地址列表表格,使用 #{tag}、#{name} 等占位符替换真实数据。 后端: 控制器层调用 AddressService,通过 AddressMapper 查询用户地址数…

Spring 循环依赖:从原理到解决方案的全面解析

Spring 循环依赖:从原理到解决方案的全面解析 一、循环依赖的定义与分类 1. 什么是循环依赖? 在 Spring 框架中,循环依赖指的是多个 Bean 之间形成了依赖闭环。例如: Bean A 依赖 Bean BBean B 依赖 Bean CBean C 又依赖 Bean…