概述
什么是ShardingSphere
是一套开源的分布式数据库中间件解决方案组成的生态圈,由JDBC、Proxy和Sidecar三部分组成。其定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。更多详情请参阅ShardingSphere官网
什么是分库分表
随着时间和业务的发展,造成表里面的数据越来越多,如果再去对数据库表curd操作,很容易造成性能问题,这个时候,为了解决由于数据量过大而造成数据库性能降低的问题,常见的解决方案其一是从硬件上增加数据库服务器的存储,其二是分库分表处理。
分库分表有两种方式:垂直切分和水平切分
垂直分表:操作数据库中某张表,把这张表中的一部分字段数据存到一张新表里面,再把这张表另一部分字段数据存到另外一张表里面
垂直分库:把单一数据库按照业务进行划分,专库专表
水平分表:在同一个数据库中建立多张表,根据一定的规则划分主键ID,将不同的数据存放在多个表中
水平分库:将一张表建立在多个数据库,根据一定的规则划分主键ID,将数据平均存放到每一个库
随着数据库数据量增加,不要马上考虑做水分切分,首先考虑缓存处理,读写分离,使用索引等等方式,如果这些方式不能根本解决问题了,再考虑做水平分库和水平分表
Sharding-JDBC简介
是一个轻量级的Java框架,是增强版的JDBC驱动
主要目的是简化对分库分表之后数据相关操作
技术栈
SpringBoot2.3.4
MyBatis-Plus3.4.0
Sharding-JDBC
HikariCP连接池
Sharding-JDBC实现水平分表
创建表
在数据库创建两张表course_1和course_2
约定规则:如果添加的主键ID是偶数把数据添加进course_1表,如果是奇数添加进course_2表
CREATE TABLE course_1 (
id BIGINT(20) NOT NULL COMMENT '主键ID',
name varchar(20) NULL COMMENT '课程名称',
status TINYINT(2) DEFAULT 10 NOT NULL COMMENT '课程状态10:正常;20:异常',
CONSTRAINT course_1_pk PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='课程表1';
CREATE TABLE course_2 (
id BIGINT(20) NOT NULL COMMENT '主键ID',
name varchar(20) NULL COMMENT '课程名称',
status TINYINT(2) DEFAULT 10 NOT NULL COMMENT '课程状态10:正常;20:异常',
CONSTRAINT course_2_pk PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='课程表2';
pom.xml中引入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>