# ruoyi-vue-doris
**Repository Path**: avatarwx/ruoyi-vue-doris
## Basic Information
- **Project Name**: ruoyi-vue-doris
- **Description**: 将ruoyi-vue底层数据库改为Doris。适合 “海量数据秒级查询 + 高并发访问” 的业务场景。
适合做实时大数据分析,查询延迟非常低。结构简单✅ 支持 SQL✅ 一体化✅ 兼容 MySQL 协议。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-08-27
- **Last Updated**: 2025-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: doris, ruoyi-doris, ruoyi-vue-doris, doris-vue, doris-ruoyi
## README
## 平台简介
- 将ruoyi-vue底层数据库改为Doris。Doris 是一个 开源的分布式分析型数据库系统, 最适合实时数据分析、交互式报表、多维 OLAP、大规模宽表、BI 查询加速,尤其适合 “海量数据秒级查询 + 高并发访问” 的业务场景。
- ✅ 查询快:适合做实时大数据分析,查询延迟非常低。
✅ 结构简单:部署和使用都比较简单,适合中小企业快速上手。
✅ 支持 SQL:像使用 MySQL 一样使用 SQL 来分析数据。
✅ 一体化:支持明细、聚合、物化视图等多种模型,一库多用。
✅ 兼容 MySQL 协议:可以用 MySQL 工具连接它。
- 记得右上角点个 star 持续关注更新哟~~

## 系统模块
```
com.ruoyi
├── ruoyi-admin // 启动类 主配置
├── ruoyi-generator // 代码生成
├── ruoyi-auth // 用户认证
├── ruoyi-quart // 定时任务
├── ruoyi-system // 业务代码
├── ruoyi-ui // 前端
```
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
```
......
```
6. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载
除此之外,还支持 系统接口,服务监控,缓存监控,在线构建器,连接池监视等功能。
## 在线体验
- (后台管理)- https://s4.s100.vip:14280
- 测试账号:admin / admin123
## 页面功能展示
## QQ交流群
* QQ交流群:852160973(加群请先star项目 不然验证不通过 备注格式:gitee用户名)
*
* 点击链接加入群聊【ruoyi-cloud-activiti7交流群】:https://jq.qq.com/?_wv=1027&k=gElPi0vw
## 启动说明
启动类在ruoyi-admin模块下
- com.ruoyi.RuoYiApplication
## 友情链接
- 感谢若依大佬开源的微服务项目:https://gitee.com/y_project/RuoYi-Vue
## 插件版本
- RuoYi-Vue 3.9.3
- apache-doris-2.1.10
- jdk1.8.0_281
- Node.js 14.0.0
- npm 6.14.4
## 🚀 Doris 相比 HBase 的优势
### 1. **查询性能**
* **Doris**:MPP 架构,专为 **OLAP 查询** 优化,支持列存、向量化执行、索引加速,复杂聚合查询可 **秒级返回**。
* **HBase**:主要是 KV 存储,适合点查或范围扫描,做多维分析需要和 Phoenix、Spark、Impala 搭配,查询延迟一般在秒\~分钟级。
👉 Doris 在 **多维聚合、报表分析、BI 查询** 上远快于 HBase。
---
### 2. **易用性**
* **Doris**:兼容 MySQL 协议,直接 `JDBC/ODBC` 连接,SQL 特性丰富,支持 BI 工具(Tableau、Superset、FineBI)。
* **HBase**:原生不支持 SQL,需要额外组件(Phoenix、Hive on HBase),SQL 能力有限,开发和维护成本高。
👉 Doris 对 **数据分析人员/BI 工程师更友好**,不需要复杂的二次开发。
---
### 3. **数据模型**
* **Doris**:原生支持 **宽表、聚合模型、明细模型、更新模型**,适合大规模宽表查询。
* **HBase**:是 **面向列的 KV 存储**,灵活但 schema 管理复杂,做宽表分析需要大量设计。
👉 Doris 在 **结构化分析** 更自然,而 HBase 偏向半结构化存储。
---
### 4. **实时分析能力**
* **Doris**:支持流式导入(Kafka/Flink),写入后秒级可查,非常适合 **实时大屏、风控、广告监控**。
* **HBase**:写入实时,但缺少原生 OLAP 能力,实时分析依赖外部系统。
👉 Doris 更适合 **实时 OLAP**,HBase 更偏向 **实时存储**。
---
### 5. **运维成本**
* **Doris**:一体化架构(存储+计算融合),运维简单,部署方便。
* **HBase**:依赖 Hadoop 生态(HDFS、Zookeeper),组件复杂,运维门槛高。
👉 Doris 的 **TCO(总体拥有成本)更低**。
---
## 📌 总结
* **Doris 的优势**:
* 高性能 OLAP 查询(秒级返回)
* 原生 SQL 支持,生态丰富
* 实时写入 + 实时查询
* 部署简单,运维成本低
* **HBase 的优势**(Doris 不擅长的地方):
* 高吞吐的 KV 存储
* 适合海量时序数据、非结构化/半结构化数据
* 强大的行级写入能力和事务性
---
🔑 **一句话**:
👉 如果需求是 **实时数据分析 / BI 报表 / 大规模宽表查询** → **选 Doris**
👉 如果需求是 **海量 KV 存储 / 时序数据存储 / 高并发写入** → **选 HBase**
---
| 特性/维度 | Doris (Apache Doris) | HBase (Apache HBase) | MySQL |
|----------------------|--------------------------------------------------------|---------------------------------------------------|-----------------------------------------------|
| **定位** | 实时 OLAP 数据库,适合分析查询、BI 报表、大屏展示 | 分布式 KV 存储,适合高吞吐写入、时序数据存储 | 关系型数据库,面向 OLTP,适合事务处理 |
| **数据模型** | 明细模型、聚合模型、更新模型,宽表友好 | Key-Value,半结构化,Schema 自由 | 关系模型(行存储),强 Schema |
| **查询性能** | 秒级甚至亚秒级查询,支持多维聚合、复杂 SQL | 点查/范围扫描较快,复杂分析需借助 Phoenix/Spark | 毫秒级点查/更新快,但大规模聚合/分析较慢 |
| **SQL 支持** | 原生 MySQL 协议,兼容标准 SQL,直接对接 BI 工具 | 原生无 SQL,需要 Phoenix/Hive 才能提供有限 SQL | 原生 SQL,生态成熟,支持事务 |
| **实时能力** | 支持 Kafka/Flink 实时导入,写入后秒级可查 | 实时写入快,但分析弱 | 支持实时事务处理,但批量导入和分析性能有限 |
| **并发能力** | 高并发(上万 QPS 分析查询) | 高写入吞吐,高并发点查 | 中等并发(百级~千级 QPS),适合中小型系统 |
| **生态集成** | 与 BI 工具(Tableau、Superset、FineBI)、Flink、Kafka | 与 Hadoop 生态(HDFS、MapReduce、Spark、Hive)紧密 | 与业务系统、应用框架(Spring、JDBC、ORM)紧密 |
| **适用场景** | 实时大屏、BI 报表、用户画像、广告投放监控、金融风控 | 时序数据存储、日志存储、IoT 数据、海量 KV 存储 | 核心业务系统、支付系统、订单管理、事务型应用 |
| **运维成本** | 一体化架构,存储+计算融合,部署运维相对简单 | 依赖 HDFS、Zookeeper 等,组件多,运维复杂 | 单机/主从/集群成熟方案多,运维简单 |
| **不适合场景** | 高频更新、强事务型 OLTP | 多维 OLAP 分析、复杂 SQL 报表 | 大规模宽表分析、实时大数据场景 |
| 功能 / 特性 | Apache Doris | MySQL |
| ------- | --------------------- | --------------- |
| 类型 | 分布式 OLAP 分析数据库 | 关系型事务数据库(OLTP) |
| 查询速度 | 面向分析场景,**海量数据秒级响应** | 面向事务,分析大数据时较慢 |
| 数据更新频率 | 批量导入为主,实时写入支持较弱(改进中) | 实时写入、更新、删除非常好 |
| 数据存储 | 列式存储(压缩率高) | 行式存储 |
| 查询语言 | SQL(兼容 MySQL 协议) | SQL |
| 扩展性 | 天然分布式,**支持水平扩展** | 扩展困难,依赖主从、分库分表 |
| 使用场景 | 报表、BI 分析、用户行为分析、大数据查询 | 电商、金融、业务系统、在线操作 |
## Doris安装(Linux,此处使用Centos7.9安装)
### 1.1 系统环境配置(所有节点均需配置)
#### 1.调大文件操作限制
```
[root@bigdata01 ~]# vi /etc/security/limits.conf
...
在文件最后添加下面几行信息(注意* 也要复制进去)
# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
临时生效 免重启
ulimit -m 65536
```
#### 2.虚拟内存区域数量限制
```
[root@bigdata01 ~]# vim /etc/sysctl.conf
# 在文件最后一行添加
vm.max_map_count=2000000
临时生效 免重启
sysctl -w vm.max_map_count=2000000
sysctl -p
```
#### 3.时钟同步
```
[root@bigdata01 ~]# yum install ntpdate -y
[root@bigdata01 ~]# ntpdate ntp.sjtu.edu.cn
18 Sep 16:06:21 ntpdate[30950]: adjust time server 17.253.84.125 offset 0.000185 sec
```
#### 4.关闭交换分区(提高性能)
```
[root@bigdata01 ~]# swapoff -a
```
### 2. FE配置
#### 1.解压
```
tar -zxvf /opt/softwares/apache-doris-2.1.10-bin-x64.tar.gz -C /opt/modules
```
#### 2.修改配置fe
```
vi /opt/modules/apache-doris-2.1.10-bin-x64/fe/conf/fe.conf
#配置文件中指定元数据路径;注意这个文件夹要自己创建
meta_dir = /data/doris_repo/doris-meta/
#修改绑定ip(每台机器修改成自己的ip)
priority_networks = 192.168.2.28/24
```
### 3 BE配置
#### 1.修改配置
```
vi /opt/modules/apache-doris-2.1.10-bin-x64/be/conf/be.conf
#配置文件中指定数据存放路径
storage_root_path = /data/doris_repo/doris-storage1;
#修改绑定 ip (每台机器修改成自己的ip)
priority_networks = 192.168.2.28/24
```
#### 2.修改配置
```
修改配置
```
### 4 注册BE到FE
#### 1.修改配置
```
yum install -y mysql
mysql -h bigdata01 -P 9030 -uroot -p
# 直接回车 没有密码
第一次登录后最好立刻修改 root 密码,例如:
SET PASSWORD FOR 'root' = PASSWORD('123456');
设置密码后重新登录
mysql -h bigdata01 -P 9030 -uroot -p
# 然后在提示符下输入 123456
```
#### 2.然后添加BE节点(我只有一个节点)
mysql>ALTER SYSTEM ADD BACKEND "bigdata01:9050"
```
修改配置
```
### 5 配置系统环境变量
#### 1.配置系统环境变量
```
[root@bigdata01 ~]# vi /etc/profile
export DORIS_FE_HOME=/opt/modules/apache-doris-2.1.10-bin-x64/fe
export DORIS_BE_HOME=/opt/modules/apache-doris-2.1.10-bin-x64/be
export PATH=$PATH:DORIS_FE_HOME/bin
export PATH=$PATH:DORIS_BE_HOME/bin
```
### 6 启动BE FE节点
#### 1.启动BE FE节点
```
启动BE
/opt/modules/apache-doris-2.1.10-bin-x64/fe/bin/start_fe.sh
启动FE
/opt/modules/apache-doris-2.1.10-bin-x64/be/conf/be.conf
```
## **DBeaver 连接 Doris** 的方法。
Doris 对外暴露的是 **MySQL 协议**(9030端口),所以在 DBeaver 里当作 MySQL 来连就行。
### 步骤
1. 打开 DBeaver,点击左上角 **新建连接**。
2. 选择数据库类型:选 **MySQL**。
3. 在连接设置里填写:
* **Host**: Doris FE 节点的 IP 或主机名(例如 `bigdata01`)
* **Port**: `9030`
* **Database**: 默认可写 `information_schema`(随便能进的库)
* **Username**: `root`
* **Password**: 默认为空(如果你已经设置了密码,就填你的密码)
4. 点击 **Test Connection** 测试。
* 如果提示驱动没装,DBeaver 会自动下载 MySQL 驱动,点确定即可。
5. 测试成功后点 **完成**,就能在左边数据库树里看到 Doris 的库表。
---
### 注意事项
* Doris 2.x 完全兼容 MySQL 协议,DBeaver 用 MySQL 驱动即可,不需要专门的 Doris 驱动。
* 管理端口 8030 是 FE 的 Web UI,SQL 访问要用 9030。
* 如果连接失败,请检查:
* `start_fe.sh` 是否成功启动 FE。
* 9030 端口在防火墙 / 安全组里是否开放。
* 用户 root 是否有权限访问(默认 root@'%' 是允许的)。
---
## Doris扩展
#### 1.注意事项
```
Doris(Apache Doris)目前 官方不提供 Windows 版本,它主要面向 Linux/Unix 系统(比如 CentOS、Ubuntu)。官方文档和发行包都是基于 Linux 的。
```
#### 2.Doris 的架构
```
## 一、📐 Doris 的架构
Apache Doris 是一个典型的 **分布式数据库系统**,由两大核心组件组成:
### 1. **FE(Frontend,前端)**
* 管理集群元数据(表结构、用户权限等)
* 负责 SQL 解析、查询优化和任务调度
* 相当于“大脑”,不存储数据
### 2. **BE(Backend,后端)**
* 真正存储数据的地方
* 执行查询、计算、聚合等操作
* 每个 BE 节点都是一个数据节点,可以横向扩展
📌 前端和后端可以分别部署在不同的服务器上,实现分布式计算。
👉 **可选组件**:
* **Broker**:用来读取外部数据(如 Hive、HDFS),可选
* **MetaStore**:FE 自带,不需要独立部署
---
```
## 3.doris-vue主键说明
```
---
1. Doris 的自增主键
在 Doris 里你可以建表时定义:
sql
CREATE TABLE sys_role (
role_id BIGINT AUTO_INCREMENT,
...
`role_id` 会由 Doris 自动生成。
---
2. 插入返回自增主键
和 MySQL 不同,**Doris 本身不支持 `LAST_INSERT_ID()` 函数**(代码之前的报错就是因为调用了这个函数)。
所以在 Doris 里插入后获取自增 ID 的方式有限:
* **方式 A(推荐)**:在 **Java 端生成全局唯一 ID**(比如用雪花算法 `IdWorker`、UUID、Redis、自定义分布式 ID 服务等),插入时带上,避免依赖 Doris 的自增。这样插入完你已经拿到 ID。
* **方式 B**:使用 Doris **JDBC** 插入时,设置 `Statement.RETURN_GENERATED_KEYS`,Doris JDBC 驱动目前部分版本会返回生成的自增主键。但需要确认你用的 Doris/StarRocks 版本支持。
*
* **方式 C**:插入后,用业务唯一键(例如 role\_name 或其它自然键)再查一次,获取对应的 `role_id`。性能稍差,但能保证拿到正确 ID。
---
3. 实际项目建议
因为用的是 **若依 + Doris**,而且之前遇到 `last_insert_id()` 报错,说明 Doris 没有完全兼容 MySQL 的自增主键取值。
👉 最稳妥的方式还是:**在 Java 端统一生成 ID(雪花算法/IdWorker)**,直接传给 Doris,这样前后端 ID 一致,不依赖数据库生成。
---
```
## 代码生成注意事项注意事项
```
代码生成文件中间中 执行.sql文件的语句时 第二条NSERT语句的LAST_INSERTED_MENU_ID占位符替换为第一条NSERT语句menu_id字段值
```