一. 简介

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

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

我使用的分表规则是通过主键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. Could not connect to 'xxx.xx.xx.xxx' (port 22): Connection failed.

    刚刚使用xshell好好的,突然注销账号,准备重新连接突然连不上了. 这就很尴尬了,对我这种linux菜鸟只能去百度了,终于解决了,赶紧记录下这个坑 1.先登陆虚拟机,输入这段命令 查看ssh服务是否 ...

  2. sscanf功能详解(转)

    #include <stdio.h> #include <stdlib.h> #include <string.h> static void sscanf_test ...

  3. 通过原生js实现数据的双向绑定

    通过js实现数据的双向绑定 : Object.defineProperty了解 语法: Object.defineProperty(obj, prop, descriptor) obj 要定义属性的对 ...

  4. 7.Java数组

    一.数组概念(最简单的数据结构) 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问 ...

  5. C语言:条件编译

    假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出 ...

  6. Kettle——shell交互命令

    Kettle--shell交互命令 在kettle上开发了job或transform可以以单独的文件存在,也可以存放在资源库中.调用这些程序可以通过shell脚本调用,记录下: 资源库中的job: . ...

  7. Scala学习——隐式转换

    scala隐式转换 一.需求:为一个类添加一个新的方法 java:动态代理 scala:隐式转换 隐式转换例子: 1.man to superMan package top.ruandb.scala. ...

  8. poj1182:食物链

    poj1182:食物链 听说是poj中最经典的一道并查集题目.我一做,果然很经典呢!好难啊!!!真的琢磨了很久还弄懂.这道题的重点就在于怎么用并查集表示题目中的关系环. 1. 题干 原题传送门1 原题 ...

  9. 【Linux服务器双IP配置】如何实现不同IP的双网卡同时上网?

    一.环境和知识预备 我遇到问题的生产机器是CentOS release 6.8系统,不过这并不影响问题的解决,本质上都是一样的. 网关:一个网络连接到另一个网络的关口,也就是实现网络互连,俗称网络连接 ...

  10. 第六篇--MFC美化界面

    1.MFC如何设置背景颜色 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CT ...