暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Doris的初步学习

济南小老虎 2025-04-05
97

Doris是什么

Apache Doris 是一个基于 MPP 架构的高性能、实时分析型数据库,
最早由百度内部孵化,用于解决百度凤巢统计报表的分析需求。
Doris 支持标准 SQL,兼容 MySQL 协议,
具有高并发点查询、分区、分桶、裁剪等特性,
适用于多维报表、即席查询、用户画像、实时大屏等场景

2017年正式对外开源,
2018年7月由百度捐赠给 Apache 基金会进行孵化。
2022年6月,Apache Doris 成功从 Apache 孵化器毕业,
正式成为 Apache 顶级项目

商业版的数据库是: 
SelectDB 
百度智能云初创人员和 Apache Doris 项目核心成员
创立的商业化公司北京飞轮科技有限公司(SelectDB)

StarRocks 
基于 Apache Doris 的一个分支,但与 SelectDB 不同,
StarRocks 对 Apache Doris 进行了硬分叉,并且不再回馈社区。
StarRocks 强调其开源协议不同,并且在商业化上更早,主要面向金融和互联网市场
也是百度palo项目组成员创立的

需要说明, 百度内部人员也成立了很多公司,
包括最近比较好的 昆仑芯GPU 
还报错业内比较好的百度飞桨AI框架


Doris的部署架构

Doris的部署其实比较简单: 
主要是FE和BE 以及对外数据存取用的broker: 

FE:
Frontend,即 Doris 的前端节点。
主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。

BE:
Backend,即 Doris 的后端节点。
主要负责数据存储与管理、查询计划执行等工作。

Broker:
Broker是Doris 集群中一个可选进程,
主要用于支持 Doris 读写远端存储上的文件和目录,
例如 HDFS、BOS 和 AFS 等
Doris Broker 通过提供一个 RPC 服务端口来提供服务,
是一个无状态的 Java 进程,
负责为远端存储的读写操作封装一些类 POSIX 的文件操作,
如 open,pread,pwrite 等等


一个简单的类比

Apache Doris 的架构中,
FE(Frontend)相当于 MySQL 的服务器层,
负责处理客户端的连接、SQL 解析、查询优化、
权限控制等任务。
FE 负责与客户端建立连接,接收 SQL 查询请求,
进行查询解析和优化,然后与 BE(Backend)通信以执行查询。

在 MySQL 中,数据库服务层通常指的是 MySQL Server 本身,
它处理客户端连接、SQL 解析、查询优化等任务。
InnoDB 是 MySQL 的一个存储引擎,负责数据的物理存储和检索。

将 Doris 和 MySQL 对比:
Doris FE 类似于 MySQL Server,负责处理客户端连接和 SQL 查询。
Doris BE 类似于 InnoDB 存储引擎,负责数据存储和检索。


极简监控

doris 其实与很多开源分布式数据库一样, 比如tidb. 
都可以实现一些使用情况的暴露与监控
一个极简的监控配置如下: 

配置节: 
scrape_configs:
  - job_name: 'doris_monitor'
    static_configs:
    - targets: ['xx.xxx.xxx.207:8030']
      labels:
        group: fe
    - targets: ['xx.xxx.xxx.207:8040''xx.xxx.xxx.208:8040''xx.xxx.xxx.209:8040']
      labels:
        group: be

Grafana监控界面导入:9734 


监控效果


Doris的一些相关端口信息


一些分布式数据库的性能理解

现阶段很多分布式数据库都是采用LSMTree的模式进行.
在数据量变动不大的情况下.
memtable 里面能够存储很多数据. 
不需要sstable的协同的话,他的处理效率是非常令人震惊的.
毕竟内存的速度至少三到六个数量级于存储. 

但是他的问题就是内存数据老化,数据变动累积,
以及残酷的未变动数据的大量读放大
会导致存储层的性能下降. 

并且因为不管是通过go还是通过java改写mysql/pg的SQL解析层
他的效率很难跟mysql原生比拟, 更遑论Oracle. 

不过分布式开源数据库一个很大的优点是
不管是Doris的FE还是TIDB里面的TiDB组件
都可以增加多个节点.并且也可以对应多个后端BE/TiKV

可以将并发的任务分散到不同的节点上来.
一方面可以到不同的SQL解析引擎(FE),避免hard parse消耗过多.
另一方面通过多副本的存储机制, 不同副本可以再不同BE上面进行IO和计算
这样可以实现 1+1+1>1效果. 
虽然因为 多副本之间的同步,有一定的commit延迟.
但是通过高速网络和 memtable 写入就返回,不需要入盘的模式来看
他的效果肯定要比redo日志入库要快的. 

唯一的缺陷还是缺少Oracle这样五十余年的积累.
复杂SQL复杂场景的适应性还是有所欠缺. 
买得起贵东西的人可能没你聪明, 但是眼光肯定比你好.


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论