# 数据库分库分表中间件 **Repository Path**: Jayle-Fan/DivideDBandTable ## Basic Information - **Project Name**: 数据库分库分表中间件 - **Description**: 这是一个基于springboot的分库分表的中间件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-11-20 - **Last Updated**: 2024-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据库分库分表中间件 #### 介绍 该项目基于SpringBoot的starter中间件开发,用于数据库路由设计,支持动态切换数据源,自定义路由策略算法。 并且采用了HashMap扰动函数散列形式,将数据散列到不同库表中,以减轻单库表的压力 #### 安装教程 0. 下载到本地 1. 使用maven安装到本地 2. 导入到pom依赖 ```xml com.example DBdivided 0.0.1-SNAPSHOT ``` 3. 配置yml属性 ```yaml DBdivided: jdbc: datasource: dbCount: 2 tbCount: 4 # 默认的分库分表id routerKey: id defaultDB: DB00 # 分库的名字,根据数据库名字找下面的数据源 listDB: DB01,DB02 DB00: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sky_take_out username: root password: Jayle1999 DB01: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_db username: root password: Jayle1999 DB02: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sky_take_out username: root password: Jayle1999 ``` 4.在需要分库分表的Mapper上加上注解@DBRouterKey 以及@IsDBRouter,如下示例 ```java @Mapper @IsDBRouter(splitTable = true)//是否分库分表注解 public interface UserMapper { @Select("select * from user where openid = #{openid}") User getByOpenid(String openid); @DBRouterKey(key = "id")//按照什么字段分库分表 @Select("select * from user where id = #{id}") User getByUserId(Long id); void insert(User byOpenid); } ``` #### 说明 #### 建库建表说名 记得从下标0开始建立,如果出现了问题,一般是jdbc与mybatis的版本问题 #### 项目改进说明 1.范围查询这一块性能很低(问题很大),可以优化 ###### ```text -思路一 通过对所有表全局查询,查询语句不变,应为在查询范围内的值是唯一的. 也就是查询范围不变,对所有的表进行一遍查询 -思路二 查询之前 对范围先hash,求出每个表的最大最小值,再去查询. ``` #### 项目收获 ```text 反射知识、AOP、自定义注解、自定义starter、SPI、ThreadLocal Mybatis插件、HashMap底层原理、SpringBoot自动装配、分库分表知识等 ``` #### 项目实现教程 CSDN:[https://blog.csdn.net/qq_44644452?type=blog](https://blog.csdn.net/qq_44644452?type=blog) #### 项目的附言 ```text 这个项目对于反射,springAOP,hashmap的散列函数,自定义注解,自定义starter,mybatis底层, spring的底层,以及项目的架构都是一个很好的帮助.这个项目的架构非常清晰,对于提升spring技术是一个很好的选择. 该项目还有一些需要完善,比如范围查找等需要优化,事务等也需要优化,我将会写一篇如何实现的大致思路放到csdn上面. 如果有什么需要帮助以及bug欢迎指正,可以给我发邮件jayle17@163.com,或则直接csdn留言. ```