一. 简介

为什么要分表,无非就两个原因,要么是并发太高,要么就是数据量太大。

所谓分表就是把传统的单表扩展为多个数据结构一样的表,通过分表策略确定操作哪一张表。

我使用的分表规则是通过主键id进行取模运算。

例如user表,假设分三个表:user_0 user_1 user_2

插入操作:

假设添加一个用户主键id为1  1%3 = 1

该用户将会插入到user_1表中

查询操作:

查询操作时shardingsphere会将个个表中的id进行排序后返回

手把手在springboot中通过shardingsphere实现mysql的分表操作。

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。
它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。
 
该文章中我们主要对Sharding-JDBC做简单的使用,更多更深入的内容铁子们可以自行去深入了解。

二. 编码阶段

1. 依赖引入(主要依赖)

 1   <dependency>
2   <groupId>org.mybatis.spring.boot</groupId>
3   <artifactId>mybatis-spring-boot-starter</artifactId>
4   <version>2.2.0</version>
5   </dependency>
6   <!--druid数据源-->
7   <dependency>
8   <groupId>com.alibaba</groupId>
9   <artifactId>druid-spring-boot-starter</artifactId>
10   <version>1.2.1</version>
11   </dependency>
12   <!--shardingsphere-->
13   <dependency>
14   <groupId>org.apache.shardingsphere</groupId>
15   <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
16   <version>4.0.0-RC1</version>
17   </dependency>
18   <dependency>
19   <groupId>org.apache.shardingsphere</groupId>
20   <artifactId>sharding-jdbc-spring-namespace</artifactId>
21   <version>4.0.0-RC1</version>
22   </dependency>
23   <!--jdbc-->
24   <dependency>
25   <groupId>mysql</groupId>
26   <artifactId>mysql-connector-java</artifactId>
27   <version>8.0.22</version>
28   </dependency>

2. 修改配置文件

 
 1 #mybatis信息
2 mybatis:
3 mapper-locations: classpath:mapping/*Mapper.xml
4 type-aliases-package: com.example.demo.entity
5
6 Spring:
7 shardingsphere:
8 datasource:
9 names: master #配置数据源
10 master:
11 type: com.alibaba.druid.pool.DruidDataSource
12 driver-class-name: com.mysql.cj.jdbc.Driver
13 url: jdbc:mysql://127.0.0.1:3306/test_1?serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
14 username: lv1
15 password: 123456
16 #配置分表规则
17 sharding:
18 #指定所需分的表
19 tables:
20 #表user_
21 user_:
22 actual-data-nodes: master.user_$->{0..2} #需要分表的表 user_0 user_1 user_2
23 table-strategy:
24 inline:
25 sharding-column: id #主键
26 algorithm-expression: user_$->{id % 3} #分表规则
27 #表order_
28 order_:
29 actual-data-nodes: master.order_$->{0..2} #需要分表的表
30 table-strategy:
31 inline:
32 sharding-column: id #主键
33 algorithm-expression: order_$->{id % 3} #分表规则
34 props:
35 sql:
36 show: true

3. 测试

@RestController
@RequestMapping("/user")
@Api(tags = "用户相关")
public class UserController { @Autowired
private UserService userService; @PostMapping(value = "/create")
@ApiOperation(value = "创建用户")
public Object create(){
List<User> users = new ArrayList<>();
User user1 = new User(1, "Echo", 1, 18, "贵阳");
User user2 = new User(2, "Echo", 1, 18, "贵阳");
User user3 = new User(3, "Echo", 1, 18, "贵阳");
User user4 = new User(4, "Echo", 1, 18, "贵阳");
User user5 = new User(5, "Echo", 1, 18, "贵阳");
User user6 = new User(6, "Echo", 1, 18, "贵阳");
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
users.add(user6);
return userService.insertForeach(users);
} @GetMapping(value = "get")
@ApiOperation(value = "获取用户信息")
private Object list(){
return userService.list();
}
}

4. 测试结果

插入效果:

 查询效果:

mysql--使用shardingsphere实现分表的更多相关文章

  1. 分库分表(4) ---SpringBoot + ShardingSphere 实现分表

    分库分表(4)--- ShardingSphere实现分表 有关分库分表前面写了三篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3.分库 ...

  2. 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离

    分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论 ...

  3. 支持MySql的数据库自动分表工具DBShardTools发布

    支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...

  4. MySQL纯透明的分库分表技术还没有

    MySQL纯透明的分库分表技术还没有  种树人./oneproxy --proxy-address=:3307 --admin-username=admin --admin-password=D033 ...

  5. MySQL分库备份与分表备份

    MySQL分库备份与分表备份 1.分库备份 要求:将mysql数据库中的用户数据库备份,备份的数据库文件以时间命名 脚本内容如下: [root@db01 scripts]# vim backup_da ...

  6. mysql数据库为什么要分表和分区?

    一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...

  7. Mysql中的分库分表

    mysql中的分库分表分库:减少并发问题分表:降低了分布式事务分表 1.垂直分表 把其中的不常用的基础信息提取出来,放到一个表中通过id进行关联.降低表的大小来控制性能,但是这种方式没有解决高数据量带 ...

  8. Mycat安装并实现mysql读写分离,分库分表

    Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...

  9. Docker安装Mycat并实现mysql读写分离,分库分表

    Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...

  10. mysql、oracle分库分表方案之sharding-jdbc使用(非demo示例)

    选择开源核心组件的一个非常重要的考虑通常是社区活跃性,一旦项目团队无法进行自己后续维护和扩展的情况下更是如此. 至于为什么选择sharding-jdbc而不是Mycat,可以参考知乎讨论帖子https ...

随机推荐

  1. STM32F103学习进程

    软硬件下载程序和程序运行的相关问题和解决方案,以我自身买的STM32F103C8T6为例 (1) 硬件需要 1. 购买一个STM32F103XXX的板子.这是一个操作实践性非常强的一个学习过程,如果没 ...

  2. ESP32-使用ADC笔记

    基于ESP-IDF4.1 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "freertos/FreeRT ...

  3. C语言相关知识

    1.指针:在程序中定义了一个变量,在进行编译时就会给该变量再内存中分配一个地址,通过访问这个地址可以找到所需变量,这个变量的地址成为该变量的指针.指针看作是内存中的一个地址,多数情况下,这个地址是内存 ...

  4. 必须要了解的Linux基本操作

    Linux常用的基础操作             1.命令行提示字符             2.切换用户             3.查看当前主机的完整名称             4.临时设置主机 ...

  5. 【redis前传】redis整数集为什么不能降级

    前言 整数集合相信有的同学没有听说过,因为redis对外提供的只有封装的五大对象!而我们本系列主旨是学习redis内部结构.内部结构是redis五大结构重要支撑! 前面我们分别从redis内部结构分析 ...

  6. Java基础00-Lamda表达式30

    1. Lambda表达式 Java8新特征之Lambda表达式 1.1 函数式编程思想概述 1.2 体验Lambda表达式 代码示例: 方式一就不演示了,可以去看Java基础24 方式2:匿名内部类的 ...

  7. 【贪心】数列分段Section I luogu-1181

    题目描述 对于给定的一个长度为\(N\)的正整数数列\(A_i\),现要将其分成连续的若干段,并且每段和不超过\(M\)(可以等于\(M\)),问最少能将其分成多少段使得满足要求. 分析 简单思考一下 ...

  8. webpack 安装使用简例

    1. 新建项目文件夹,如 webpack-demo 2. cd 到安装项目根目录,即进入webpack-demo文件夹,命令行工具输入"npm install webpack webpack ...

  9. redis数据类型及应用场景

    0.key的通用操作 KEYS * keys a keys a* 查看已存在所有键的名字 ****TYPE 返回键所存储值的类型 ****EXPIRE\ PEXPIRE 以秒\毫秒设定生存时间 *** ...

  10. 最大公约数and最小公倍数(Java版)

    1.最大公约数and最小公倍数 import java.util.Scanner; public class MultipleAndDivisor { public static void main( ...