java面试 mysql分库分表_Sharding-JDBC—分库分表实例【面试+工作】

Sharding-JDBC—分库分表实例【面试+工作】

学习之前先详细介绍Sharding-JDBC

Sharding-JDBC是一个开源的适用于微服务的分布式数据访问基础类库,它始终以云原生的基础开发套件为目标。

Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式,可理解为增强版的JDBC驱动,旧代码迁移成本几乎为零。

Sharding-JDBC完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。从2016年开源至今,在经历了整体架构的数次精炼以及稳定性打磨后,如今它已积累了足够的底蕴,相信可以成为开发者选择技术组件时的一个参考。

1. 分库分表SQL解析功能完善,支持聚合,分组,排序,LIMIT,TOP等查询,并且支持级联表以及笛卡尔积的表查询

支持内、外连接查询

分片策略灵活,可支持=,BETWEEN,IN等多维度分片,也可支持多分片键共用,以及自定义分片策略

基于Hint的强制分库分表路由

2. 读写分离一主多从的读写分离配置,可配合分库分表使用

基于Hint的强制主库路由

3. 柔性事务最大努力送达型事务

TCC型事务(TBD)

4. 分布式主键统一的分布式基于时间序列的ID生成器

5. 兼容性可适用于任何基于java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC

可基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid等

理论上可支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL

6. 灵活多样的配置Java

YAML

Inline表达式

Spring命名空间

Spring boot starter

7. 分布式治理能力 (2.0新功能)配置集中化与动态化,可支持数据源、表与分片策略的动态切换(2.0.0.M1)

客户端的数据库治理,数据源失效自动切换(2.0.0.M2)

基于Open Tracing协议的APM信息输出(2.0.0.M3)

架构图

179411593_3_20200102021644394_wm

一、概述

之前,我们介绍了利用Mycat进行分库分表操作,Mycat分表操作是利用分库来进行的,单个库中的分表操作可结合MySQL的分区进行,这也是Mycat官方提倡的方式。那么,如何利用Mycat真正实现数据库的分库分表,可以私信我。今天,我们来看看sharding-jdbc,sharding-jdbc也是一款分库分表的“中间件”,不过,它并不向Mycat那样作为一个真正的中间件,它是一款以jar包的形式整合到业务中的插件,这就决定了它是轻量级的,用法也是十分简单的。

二、分库分表实战

接下来,我们就利用sharding-jdbc进行数据库的分库分表操作。

1、创建数据库

首先我们创建相应的数据库

这样我们就创建了两个数据库sharding_0和sharding_1;

接下来我们在两个库中创建相应的数据表,在两个库中分别进行如下SQL:

179411593_5_2020010202164581_wm

179411593_6_20200102021645472_wm

这样,我们的数据库就准备好了。

2、创建项目

接下来,我们就创建一个Maven项目,项目结构如下:

179411593_7_20200102021645894_wm

3、配置pom.xml

179411593_8_20200102021646269_wm

179411593_9_20200102021646581_wm

179411593_10_20200102021646831_wm

4、创建数据库映射类

这里,我们创建两个数据库映射类:User类和Student类。

4-1、User类

179411593_11_20200102021647128_wm

179411593_12_20200102021647691_wm

4-2、Student类

179411593_13_20200102021647910_wm

179411593_14_20200102021648175_wm

5、创建Mapper类

5-1、UserMapper类

179411593_15_20200102021648253_wm

5-2、StudentMapper类

179411593_16_20200102021648472_wm

6、创建service类

6-1、UserService类

179411593_17_20200102021648785_wm

6-2、StudentService类

179411593_18_2020010202164935_wm

7、创建service的实现类

7-1、UserServiceImpl类

179411593_19_20200102021649238_wm

179411593_20_20200102021649550_wm

7-2、StudentServiceImpl类

179411593_21_20200102021649847_wm

8、创建分库逻辑

8-1、User分库逻辑UserSingleKeyDatabaseShardingAlgorithm类

179411593_22_202001020216503_wm

179411593_23_20200102021650269_wm

8-2、Student分库逻辑StudentSingleKeyDatabaseShardingAlgorithm

179411593_24_20200102021650675_wm

179411593_25_20200102021651144_wm

9、创建分表逻辑

9-1、User分表逻辑UserSingleKeyTableShardingAlgorithm

179411593_26_20200102021651581_wm

179411593_27_20200102021651847_wm

9-2、创建Student分表逻辑StudentSingleKeyTableShardingAlgorithm

179411593_28_20200102021652159_wm

179411593_29_20200102021652535_wm

10、创建Mapper.xml

10-1、创建UserMapper.xml

179411593_30_202001020216533_wm

10-2、创建StudentMapper.xml

179411593_31_20200102021653347_wm

11、创建jdbc_dev.properties

179411593_32_20200102021653660_wm

12、创建spring配置文件

12-1、spring-database.xml

179411593_33_20200102021653878_wm

179411593_34_20200102021654347_wm

179411593_35_20200102021654769_wm

12-2、spring-sharding.xml

179411593_36_20200102021654894_wm

179411593_37_20200102021655285_wm

179411593_38_20200102021655769_wm

179411593_39_20200102021656113_wm

13、创建log4j.xml

179411593_40_20200102021656378_wm

179411593_41_20200102021656691_wm

14、创建测试类ShardingJdbcMybatisTest

179411593_42_20200102021656909_wm

179411593_43_20200102021657363_wm

三、测试

我们进行ShardingJdbcMybatisTest类,查看数据表数据,即可看到我们的程序利用sharding-jdbc实现了分库分表操作。

179411593_44_20200102021657660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值