Sharding-Jdbc实现读写分离、分库分表,妙,2024Java面试总结

本文详细介绍了如何使用Sharding-Jdbc实现读写分离和分库分表,包括配置数据源、主从同步、分片策略和分布式主键。通过示例展示了Springboot整合Sharding-Jdbc的步骤,并分享了数据库分库分表的原理与实践,为Java面试和项目实施提供了实用指导。
摘要由CSDN通过智能技术生成
  • 在从库B上通过change master命令,设置主库A的IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量

  • 在从库B上执行start slave命令,这时从库会启动两个线程,就是图中的I/O线程和SQL线程。其中I/O线程负责与主库建立连接

  • 主库A校验完用户名、密码后,开始按照从库B传过来的位置,从本地读取binlog,发给B

  • 从库B拿到binlog后,写到本地文件,称为中继日志

  • SQL线程读取中继日志,解析出日志里的命令,并执行

由于多线程复制方案的引入,SQL线程演化成了多个线程

主从复制不是完全实时地进行同步,而是异步实时。这中间存在主从服务之间的执行延时,如果主服务器的压力很大,则可能导致主从服务器延时较大

3、Sharding-Jdbc实现读写分离


1)、新建Springboot工程,引入相关依赖

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.4

mysql

mysql-connector-java

runtime

com.alibaba

druid-spring-boot-starter

1.1.21

org.apache.shardingsphere

sharding-jdbc-spring-boot-starter

4.0.0-RC1

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

2)、application.properties配置文件

spring.main.allow-bean-definition-overriding=true

#显示sql

spring.shardingsphere.props.sql.show=true

#配置数据源

spring.shardingsphere.datasource.names=ds1,ds2,ds3

#master-ds1数据库连接信息

spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource

spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver

spring.shardingsphere.datasource.ds1.url=jdbc:mysql://47.101.58.187:3306/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai

spring.shardingsphere.datasource.ds1.username=root

spring.shardingsphere.datasource.ds1.password=123456

spring.shardingsphere.datasource.ds1.maxPoolSize=100

spring.shardingsphere.datasource.ds1.minPoolSize=5

#slave-ds2数据库连接信息

spring.shardingsphere.datasource.ds2.type=com.alibaba.druid.pool.DruidDataSource

spring.shardingsphere.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver

spring.shardingsphere.datasource.ds2.url=jdbc:mysql://47.101.58.187:3307/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai

spring.shardingsphere.datasource.ds2.username=root

spring.shardingsphere.datasource.ds2.password=123456

spring.shardingsphere.datasource.ds2.maxPoolSize=100

spring.shardingsphere.datasource.ds2.minPoolSize=5

#slave-ds3数据库连接信息

spring.shardingsphere.datasource.ds3.type=com.alibaba.druid.pool.DruidDataSource

spring.shardingsphere.datasource.ds3.driver-class-name=com.mysql.cj.jdbc.Driver

spring.shardingsphere.datasource.ds3.url=jdbc:mysql://47.101.58.187:3307/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai

spring.shardingsphere.datasource.ds3.username=root

spring.shardingsphere.datasource.ds3.password=123456

spring.shardingsphere.datasource.ds.maxPoolSize=100

spring.shardingsphere.datasource.ds3.minPoolSize=5

#配置默认数据源ds1 默认数据源,主要用于写

spring.shardingsphere.sharding.default-data-source-name=ds1

#配置主从名称

spring.shardingsphere.masterslave.name=ms

#置主库master,负责数据的写入

spring.shardingsphere.masterslave.master-data-source-name=ds1

#配置从库slave节点

spring.shardingsphere.masterslave.slave-data-source-names=ds2,ds3

#配置slave节点的负载均衡均衡策略,采用轮询机制

spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin

#整合mybatis的配置

mybatis.type-aliases-package=com.ppdai.shardingjdbc.entity

3)、创建t_user表

CREATE TABLE t_user (

id int(11) NOT NULL AUTO_INCREMENT,

nickname varchar(100) DEFAULT NULL,

password varchar(100) DEFAULT NULL,

sex int(11) DEFAULT NULL,

birthday varchar(50) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

4)、定义Controller、Mapper、Entity

@Data

public class User {

private Integer id;

private String nickname;

private String password;

private Integer sex;

private String birthday;

}

@RestController

@RequestMapping(“/api/user”)

public class UserController {

@Autowired

private UserMapper userMapper;

@PostMapping(“/save”)

public String addUser() {

User user = new User();

user.se

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值