# 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 持续关注更新哟~~ ![img](https://image-1304556315.cos.ap-beijing.myqcloud.com/star.png) ## 系统模块 ``` 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字段值 ```