Doris 数据库深度解析:架构、原理与实战应用
一、Doris 的架构与原理
1. 架构组成
Doris 是一个分布式 MPP(大规模并行处理)数据库,它的架构主要由以下几部分组成:
- FE(Frontend):负责管理元数据、解析 SQL 查询、优化查询计划,并将任务分配给 BE。
- BE(Backend)):负责实际存储数据和执行查询任务。
- Broker:用于读取外部存储(如 HDFS、S3 等)的数据。
- MySQL 客户端:用户通过 MySQL 客户端连接 Doris,提交 SQL 查询。
架构图:
+----------------+ +----------------+ +----------------+
| | | | | |
| MySQL | -----> | Frontend | -----> | Backend |
| 客户端 | | (FE) | | (BE) |
| | | | | |
+----------------+ +----------------+ +----------------+
2. 数据存储
Doris 使用列式存储来优化分析性能。数据以列的形式存储,而不是传统数据库的行式存储。这种方式在处理聚合查询(如求和、平均值等)时效率更高。
- 数据模型:
- 表(Table):存储数据的基本单位,由多个列组成。
- 分区(Partition):将表中的数据按某种规则(如时间范围)分成多个分区,便于管理和查询。
- 分片(Tablet):分区进一步被分成多个分片,分片是数据存储的最小单位,分布在不同的 BE 上。
公式:
[ \text{表} = \text{分区} \times \text{分片} ]
示例:
假设有一个订单表,按时间分区,每天一个分区。每个分区又被分成多个分片,分布在不同的 BE 上。
3. 查询优化
Doris 使用了多种优化技术来提高查询性能:
-
查询计划优化:
- FE 接收到 SQL 查询后,会生成一个查询计划树,优化查询逻辑,减少不必要的计算。
- 例如,对于一个带有
WHERE
子句的查询,Doris 会先过滤掉不符合条件的数据,再进行后续计算。
-
并行计算:
- Doris 支持 MPP 架构,可以将查询任务并行化,分配到多个 BE 上同时执行。
- 每个 BE 只处理自己负责的分片数据,最后将结果汇总。
公式:
[ \text{查询时间} = \frac{\text{数据量}}{\text{并行度} \times \text{优化效率}} ]
示例:
假设有一个查询需要处理 100GB 的数据,Doris 有 10 个 BE 节点,每个节点处理 10GB 数据。如果优化效率为 80%,那么查询时间会显著减少。
4. 数据更新与维护
Doris 支持多种数据更新方式:
- 全量更新:通过
ALTER TABLE
或UPDATE
语句直接修改数据。 - 增量更新:支持流式写入(Stream Load)和批量导入(Broker Load),适合实时数据更新场景。
示例:
-- 全量更新
UPDATE orders SET amount = amount * 1.1 WHERE date = '2025-06-07';-- 流式写入
PUT /api/_stream_load HTTP/1.1
Host: be_host:port
Authorization: Basic base64_encoded_auth
Content-Type: text/plain
Expect: 100-continue1,2025-06-07,100
2,2025-06-07,200
5. 数据分析与聚合
Doris 非常适合做数据分析,支持多种聚合函数(如 SUM
、AVG
、COUNT
等)。
公式:
[ \text{聚合结果} = \text{聚合函数}(\text{列}) ]
示例:
-- 计算订单表中每天的订单总数
SELECT date, COUNT(*) AS total_orders FROM orders GROUP BY date;-- 计算每个用户的平均订单金额
SELECT user_id, AVG(amount) AS avg_amount FROM orders GROUP BY user_id;
二、Doris 的核心技术
1. 列式存储与向量化执行
Doris 使用列式存储,数据按列存储在磁盘上,查询时只读取需要的列,大大减少了 I/O 操作。
- 向量化执行:
- Doris 在查询时会将数据批量加载到内存中,以向量的形式进行计算,而不是逐行处理。
- 这种方式可以充分利用 CPU 的 SIMD(单指令多数据)指令,提高计算效率。
公式:
[ \text{查询效率} = \text{向量化执行效率} \times \text{列式存储 I/O 效率} ]
2. 分布式事务
Doris 支持分布式事务,确保数据的一致性。在更新数据时,Doris 会通过两阶段提交(2PC)或本地事务日志(Local Write)来保证数据的完整性和一致性。
示例:
假设同时更新多个表的数据,Doris 会确保这些更新要么全部成功,要么全部失败,不会出现部分更新的情况。
3. 数据压缩与编码
Doris 使用多种压缩算法(如 Snappy、LZ4 等)和编码方式(如字典编码、前缀编码等)来减少存储空间,同时提高读取效率。
公式:
[ \text{存储空间} = \frac{\text{原始数据量}}{\text{压缩率}} ]
示例:
假设原始数据量为 100GB,压缩率可以达到 50%,那么实际存储空间只需要 50GB。
三、Doris 的应用场景
1. 数据仓库
Doris 可以作为数据仓库的核心组件,用于存储和分析企业级数据。
- 优势:
- 支持大规模数据存储和快速查询。
- 支持多种数据模型(如星型模型、雪花模型)。
2. 实时数据分析
Doris 支持流式写入和实时查询,适合实时数据分析场景。
- 示例:
- 监控系统:实时分析系统性能指标。
- 电商系统:实时分析订单数据。
3. 数据湖
Doris 可以与数据湖(如 HDFS、S3)结合,读取外部存储的数据,进行分析。
- 优势:
- 支持多种数据格式(如 Parquet、ORC)。
- 支持联邦查询,可以直接查询外部存储的数据。
四、总结
Doris 是一个高性能的分布式 MPP 数据库,具有以下特点:
- 列式存储与向量化执行:提高查询效率。
- 分布式架构:支持大规模数据存储和并行计算。
- 多种优化技术:查询优化、数据压缩、分布式事务等。
- 广泛的应用场景:数据仓库、实时数据分析、数据湖等。
希望这次的讲解能够满足你的需求,如果有任何问题,欢迎随时提问!
相关文章:
Doris 数据库深度解析:架构、原理与实战应用
一、Doris 的架构与原理 1. 架构组成 Doris 是一个分布式 MPP(大规模并行处理)数据库,它的架构主要由以下几部分组成: FE(Frontend):负责管理元数据、解析 SQL 查询、优化查询计划࿰…...

【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案
以下是全国产化飞腾AI加固服务器采用飞腾昇腾PCIe Switch解决方案: 🖥️ 一、硬件架构亮点 国产算力双擎 飞腾处理器:搭载飞腾FT2000/64核服务器级CPU(主频1.8-2.2GHz),支持高并发任务与复杂计算&a…...
【术语扫盲】评估指标Precision、Recall、F1-score、Support是什么含义?
一、背景 Precision、Recall、F1-score、Support 是分类问题中最常用的评估指标,它们是机器学习、深度学习、数据挖掘中非常基础也非常重要的术语。 二、 详细解释 指标含义公式Precision(精准率)预测为某类的样本中,有多少是真…...

应用层协议:HTTPS
目录 HTTPS:超文本传输安全协议 1、概念 2、通信过程及关键技术 2.1 通信过程 1> TLS握手协商(建立安全通道) 2> 加密数据传输 2.2 关键技术 1> 对称加密算法 2> 非对称加密 3> 对称加密和非对称加密组合 4> 数…...

【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具
"国土空间规划后续也是走向数据治理,数据建库已经是涉及到城市规划、建筑、市政、农业、地理信息、测绘等等方方面面。不得不说以后数据库建设跟维护,是很多专业的必修课。小编就湖南省的村庄规划建库过程中规划用地用海中规划状态字段写了个小工具…...
React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
React 实战项目:实时聊天应用 欢迎来到本 React 开发教程专栏 的第 28 篇!在前 27 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和架构模式等核心知识。这一次,…...
Go语言中的if else控制语句
if else是Go语言中最基础也最常用的条件控制语句,用于根据条件执行不同的代码块。下面我将详细介绍Go语言中if else的各种用法和特性。 1. 基本语法 1.1. 最简单的if语句 if 条件表达式 {// 条件为true时执行的代码 } 示例: if x > 10 {fmt.Prin…...

【PCIe总线】-- inbound、outbound配置
PCI、PCIe相关知识整理汇总 【PCIe总线】 -- PCI、PCIe相关实现 由之前的PCIe基础知识可知,pcie的组成有:RC(根节点)、siwtch(pcie桥)、EP(设备)。 RC和EP,以及EP和EP能…...

分布式锁实战:Redisson vs. Redis 原生指令的性能对比
分布式锁实战:Redisson vs. Redis 原生指令的性能对比 引言 在DIY主题模板系统中,用户可自定义聊天室的背景、图标、动画等元素。当多个运营人员或用户同时修改同一模板时,若没有锁机制,可能出现“甲修改了背景色,乙…...
MyBatis中foreach集合用法详解
在 MyBatis 中,<foreach> 标签用于遍历集合(Collection、List、Array、Map),常用于构建动态 SQL 语句(如 IN 查询、批量插入等)。以下是详细用法和示例: 核心属性 属性描述collection必填…...

react+taro 开发第五个小程序,解决拼音的学习
1.找一个文件夹 cmd 2.taro init 3.vscode 找开该文件夹cd help-letters 如:我的是(base) PS D:\react\help-letters> pnpm install 4.先编译一下吧。看下开发者工具什么反应。 pnpm dev:weapp 5.开始规则。我用cursor就是不成功。是不是要在这边差不多了&…...
高防IP可以防护什么攻击类型?企业网络安全的第一道防线
“高防IP”成为企业构建网络安全防护体系的重要一环。尤其是对于金融、电商、游戏、政务等业务高度依赖网络稳定性的行业而言,确保系统724小时正常运行已经成为基本要求。高防IP到底可以防护哪些攻击类型?它又是如何帮助企业抵御风险、保障服务稳定运行的…...
Wireshark使用教程(含安装包和安装教程)
Wireshark使用入门教程 0.资源下载以及软件安装1.Wireshark中无法显示网卡列表2.Wireshark抓取H264过程 0.资源下载以及软件安装 参考blog: 抓包神器wireshark安装保姆级教程 压缩包下载:Wireshark安装包 1.Wireshark中无法显示网卡列表 Wireshark中无法显示网…...
Asp.Net Core基于StackExchange Redis 缓存
NuGet安装 StackExchange.Redis Microsoft.Extensions.Options 0. appsettings.json初始化配置 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHos…...
【Linux】SSH:免密登录
配置 SSH 的免密登录(基于公钥认证)可实现无需输入密码即可登录远程主机,常用于自动化脚本、服务器集群、DevOps 等场景。 生成本地 SSH 密钥对(若尚未存在) 在本地客户端执行: ssh-keygen -t rsa -b 409…...

kafka(windows)
目录 介绍 下载 配置 测试 介绍 Kafka是一个分布式流媒体平台,类似于消息队列或企业信息传递系统。 下载 Kafka对于Zookeeper是强依赖,所以安装Kafka之前必须先安装zookeeper 官网:Apache Kafka 下载此安装包并解压 配置 新建log…...
深度学习习题3
1.训练神经网络过程中,损失函数在一些时期(Epoch)不再减小, 原因可能是: 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务,我们不是将神经网络中的随机权重…...
勒让德多项式
勒让德多项式 (Legendre) 当区间为 [ − 1 , 1 ] [-1,1] [−1,1],权函数 ρ ( x ) 1 ρ(x)1 ρ(x)1时,由 1 , x , . . . , x n , . . . {1,x,...,x^n,...} 1,x,...,xn,...正交化得到的多项式称为勒让德多项式,并用 P 0 ( x ) , P 1 ( x ) ,…...
atc abc409E
原题链接:E - Pair Annihilation 题目背景: n 个点 n - 1 条边的有权无向图,每个点都有一个值,两个连通的点的值可以互相抵消,既将u 的 -1 传给 v 时可以抵消掉 v 的 1 并花费边权值;求最小花费。 考察算…...
Mysql批处理写入数据库
在学习mybatisPlus时,看到一个原本没用过的参数: rewriteBatchedStatementstrue 将上述代码装入jdbc的url中即可使数据库启用批处理写入。 需要注意的是,这个参数仅适用于MySQL JDBC 驱动的私有扩展参数。 作用原理是: 原本的…...

基于安卓的文件管理器程序开发研究源码数据库文档
摘 要 伴随着现代科技的发展潮流,移动互联网技术快速发展,各种基于通信技术的移动终端设备做的也越来越好了,现代智能手机大量的进入到了我们的生活中。电子产品的各种软硬技术技术的发展,操作系统的不断更新换代,谷歌…...

EMC VNXe 存储系统日志收集方法
写在前面 有朋友找来看看VNXe的故障,这种问题总是要收集日志,顺便这里也分享给大家。 注意,VNXe和VNX 属于完全不同的产品,不要看名字很类似,操作系统已经完全重构了,如果说是否有联系,大概就…...
嵌入式链表操作原理详解
嵌入式链表操作原理详解 链表是嵌入式软件开发中最基础的数据结构之一,其设计采用嵌入式链表节点的思想,实现了高度通用的链表管理机制。以下是核心原理和操作的全面解析: 一、基础数据结构 struct list_head {struct list_head *next, *pr…...

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态
离境退税新政核心内容与外贸企业影响 (一)政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店,并放宽备案条件至纳税信用M级企业。以上海为例,静安区计划新增1000家退…...
一.设计模式的基本概念
一.核心概念 对软件设计中重复出现问题的成熟解决方案,提供代码可重用性、可维护性和扩展性保障。核心原则包括: 1.1. 单一职责原则 定义:一个类只承担一个职责,避免因职责过多导致的代码耦合。 1.2. 开闭原则 定义…...

以人类演示视频为提示,学习可泛化的机器人策略
25年5月来自清华大学、上海姚期智研究院和星动纪元(RoboEra)公司的论文“Learning Generalizable Robot Policy with Human Demonstration Video as a Prompt”。 最近的机器人学习方法通常依赖于从通过遥操作收集的大量机器人数据集中进行模仿学习…...
split方法
在编程中,split 方法通常用于将字符串按照指定的分隔符拆分成多个部分,并返回一个包含拆分结果的列表(或数组)。不同编程语言中的 split 方法语法略有不同,但核心功能相似。以下是常见语言中的用法: 1. P…...

SOC-ESP32S3部分:36-适配自己的板卡
飞书文档https://x509p6c8to.feishu.cn/wiki/RP4UwPrsKi4xuQkKLAAcKxD3n1b 如果你自己画了PCB板,需要把自己绘制的板卡配置小智AI工程,可以参考此文档。 下载源码 克隆或下载源码到本地,这里以1.5.5为例,大家可以自行修改其它版…...

LLMs 系列科普文(8)
八、模型的自我认知 接下来我们聊聊另一种问题,即模型的自我认知。 网上经常经常可以看到人们会问大语言模型一些关于认知方面的问题,比如“你是什么模型?谁创造了你?” 说实话,其实这个问题有点无厘头。 之所以这么…...
【明日方舟 × 红黑树】干员调度如何不掉线?算法工程的平衡魔法全揭秘!
【明日方舟 红黑树】干员调度如何不掉线?算法工程的平衡魔法全揭秘! 作者:星之辰 标签:#红黑树 #明日方舟 #工程平衡树 #算法科普 #动态数据结构 引子:为什么你的干员调度能实时平衡,从不崩盘?…...