yudao-cloud数据库设计:MySQL+MyBatis Plus多数据源与读写分离

yudao-cloud数据库设计:MySQL+MyBatis Plus多数据源与读写分离

【免费下载链接】yudao-cloud ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP、AI 大模型等功能。你的 ⭐️ Star ⭐️,是作者生发的动力! 【免费下载链接】yudao-cloud 项目地址: https://gitcode.com/gh_mirrors/yu/yudao-cloud

概述

在现代企业级应用中,数据库的性能和可用性是系统架构设计的核心考量。yudao-cloud作为一款基于Spring Cloud Alibaba的企业级后台管理系统,采用了MySQL作为主要数据库,并集成了MyBatis Plus框架,通过多数据源和读写分离技术来提升系统的数据处理能力和高可用性。

本文将深入解析yudao-cloud的数据库架构设计,重点介绍其多数据源配置、读写分离实现原理以及在实际业务场景中的应用实践。

技术架构概览

核心组件依赖

yudao-cloud的多数据源架构基于以下核心技术栈:

mermaid

主要技术特性

特性实现方式优势
多数据源Dynamic Datasource Starter灵活的数据源配置和管理
读写分离注解驱动自动路由,业务无感知
事务管理@DSTransactional跨数据源事务一致性
连接池Druid高性能连接管理

多数据源配置详解

数据源枚举定义

yudao-cloud通过DataSourceEnum接口定义了标准的数据源标识:

public interface DataSourceEnum {
    /**
     * 主库,推荐使用 @Master 注解
     */
    String MASTER = "master";
    
    /**
     * 从库,推荐使用 @Slave 注解
     */
    String SLAVE = "slave";
}

配置文件结构

application.yml中,多数据源的配置采用以下结构:

spring:
  datasource:
    dynamic:
      primary: master # 设置默认的数据源
      strict: false # 严格匹配数据源,默认false
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useUnicode=true&characterEncoding=utf8
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave:
          url: jdbc:mysql://127.0.0.1:3307/ruoyi-vue-pro?useUnicode=true&characterEncoding=utf8
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver

读写分离实现机制

注解驱动路由

yudao-cloud采用注解方式实现读写操作的自动路由:

// 写操作使用主库
@Master
@Transactional
public void createUser(User user) {
    userMapper.insert(user);
}

// 读操作使用从库  
@Slave
public User getUserById(Long id) {
    return userMapper.selectById(id);
}

// 复杂业务场景使用明确注解
@DS(DataSourceEnum.MASTER)
public void complexBusinessOperation() {
    // 业务逻辑
}

事务处理策略

对于跨数据源的事务操作,yudao-cloud使用@DSTransactional注解:

@DSTransactional
public void multiDataSourceOperation() {
    // 操作主库
    masterMapper.insert(data);
    
    // 操作从库或其他数据源
    slaveMapper.update(data);
    
    // 事务会自动管理
}

数据库表设计规范

通用字段设计

yudao-cloud的所有表都遵循统一的字段设计规范:

CREATE TABLE `sys_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '密码',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  INDEX `idx_username` (`username`),
  INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

核心表结构示例

1. 系统配置表
CREATE TABLE `infra_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '参数主键',
  `category` varchar(50) NOT NULL COMMENT '参数分组',
  `type` tinyint NOT NULL COMMENT '参数类型',
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '参数名称',
  `config_key` varchar(100) NOT NULL DEFAULT '' COMMENT '参数键名',
  `value` varchar(500) NOT NULL DEFAULT '' COMMENT '参数键值',
  `visible` bit(1) NOT NULL COMMENT '是否可见',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='参数配置表';
2. 数据源配置表
CREATE TABLE `infra_data_source_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '参数名称',
  `url` varchar(1024) NOT NULL COMMENT '数据源连接',
  `username` varchar(255) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='数据源配置表';

性能优化策略

索引设计原则

yudao-cloud遵循以下索引设计最佳实践:

  1. 主键索引:所有表都必须有自增主键
  2. 唯一索引:保证业务数据的唯一性
  3. 组合索引:针对高频查询条件建立合适的组合索引
  4. 覆盖索引:减少回表查询,提升查询性能

查询优化技巧

// 使用QueryWrapperX进行链式查询
public PageResult<User> getUsers(UserPageReqVO reqVO) {
    return userMapper.selectPage(reqVO, new QueryWrapperX<User>()
        .likeIfPresent("username", reqVO.getUsername())
        .eqIfPresent("status", reqVO.getStatus())
        .betweenIfPresent("create_time", reqVO.getCreateTime())
        .orderByDesc("id"));
}

// 使用Lambda表达式避免硬编码
public User getUserByUsername(String username) {
    return userMapper.selectOne(new LambdaQueryWrapperX<User>()
        .eq(User::getUsername, username));
}

监控与运维

数据库监控配置

yudao-cloud集成了Druid监控,可以通过以下配置启用:

spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: 123456
      web-stat-filter:
        enabled: true

健康检查机制

系统提供以下健康检查端点:

  • /actuator/health:应用健康状态
  • /actuator/metrics:性能指标监控
  • /druid:数据库连接池监控

实战应用场景

场景一:用户管理模块

mermaid

场景二:多数据源事务处理

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
    
    private final UserMapper userMapper;
    private final LogMapper logMapper;
    
    @Override
    @DSTransactional
    public void createUserWithLog(UserCreateReqVO reqVO) {
        // 操作主库 - 用户表
        User user = UserConvert.INSTANCE.convert(reqVO);
        userMapper.insert(user);
        
        // 操作从库或其他数据源 - 日志表
        Log log = new Log();
        log.setContent("创建用户: " + user.getUsername());
        logMapper.insert(log);
        
        // 如果出现异常,两个操作都会回滚
    }
}

最佳实践总结

配置建议

  1. 连接池配置:根据实际业务压力调整Druid连接池参数
  2. 超时设置:合理设置查询超时时间,避免长时间占用连接
  3. 监控告警:配置数据库监控告警,及时发现性能问题

开发规范

  1. 注解使用:明确使用@Master@Slave@DS注解
  2. 事务管理:跨数据源操作必须使用@DSTransactional
  3. SQL优化:避免N+1查询,使用合适的索引

运维建议

  1. 定期备份:建立完善的数据库备份策略
  2. 性能监控:持续监控数据库性能指标
  3. 容量规划:根据业务增长进行数据库容量规划

结语

yudao-cloud通过MySQL+MyBatis Plus的多数据源和读写分离架构,为企业级应用提供了高性能、高可用的数据库解决方案。这种架构不仅提升了系统的处理能力,还通过清晰的代码规范和最佳实践,保证了系统的可维护性和扩展性。

在实际项目中,开发者可以根据业务需求灵活配置数据源,通过注解驱动的方式实现读写分离,同时利用MyBatis Plus的强大功能提升开发效率。这种架构设计为构建稳定可靠的企业级应用奠定了坚实的基础。

通过本文的详细解析,相信您对yudao-cloud的数据库架构有了更深入的理解,能够在实际项目中更好地应用和优化这一技术方案。

【免费下载链接】yudao-cloud ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP、AI 大模型等功能。你的 ⭐️ Star ⭐️,是作者生发的动力! 【免费下载链接】yudao-cloud 项目地址: https://gitcode.com/gh_mirrors/yu/yudao-cloud

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值