一. 简介

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

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

我使用的分表规则是通过主键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. 《Do Neural Dialog Systems Use the Conversation History Effectively? An Empirical Study》

    https://zhuanlan.zhihu.com/p/73723782 请复制粘贴到markdown 查看器查看! Do Neural Dialog Systems Use the Convers ...

  2. Spring学习总结(一)---谈谈对Spring IOC的理解(一:理论知识理解)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  3. 从2021强网杯的一道题学习docx文件操作

    [强网先锋]寻宝 啊对就是这道题,大佬们都贼快,菜如我还得慢慢整 key1 大佬们都一笔带过,哎,虽然简单,但是也别这么虐我们啊 我来简单写一下吧 <?php header('Content-t ...

  4. 深度解析 Lucene 轻量级全文索引实现原理

    一.Lucene简介 1.1 Lucene是什么? Lucene是Apache基金会jakarta项目组的一个子项目: Lucene是一个开放源码的全文检索引擎工具包,提供了完整的查询引擎和索引引擎, ...

  5. dev c++处理汉字

    工具--编译选项--编译器 在连接器命令行加入以下命令 -static-libgcc  -finput-charset=GBK  -fexec-charset=GBK 有些处理汉字的程序运行正常,但E ...

  6. 【论文阅读】DSDNet Deep Structured self-Driving Network

    前言引用 [2] DSDNet Deep Structured self-Driving Network Wenyuan Zeng, Shenlong Wang, Renjie Liao, Yun C ...

  7. File类与常用IO流第十章——序列化流

    第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...

  8. CentOS下 Django部署 nginx+uWSGI+Django(二)

    该篇内容承接CentOS下 Django部署 uWSGI+Django(一),细节流程可参考此篇内容. 1. 当前系统 CentOS Linux release 7.6.1810 Python 2.7 ...

  9. response 重定向

    背景: controller层需要重定向到其他html界面时,需要用如下代码 // 设置302状态码 response.setStatus(302); // 设置location响应头 respons ...

  10. Select、Poll、Epoll IO复用技术

    简介 目前多进程方式实现的服务器端,一次创建多个工作子进程来给客户端提供服务, 但是创建进程会耗费大量资源,导致系统资源不足 IO复用技术就是让一个进程同时为多个客户端端提供服务 IO复用技术 之 S ...