ShardingSphere-Sharding-JDBC (读写分离) | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习ShardingSphere-Sharding-JDBC (读写分离)。

开发者学堂课程【数据库中间件ShardingSphere详解ShardingSphere-Sharding-JDBC (读写分离)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/666/detail/11252


ShardingSphere-Sharding-JDBC (读写分离)

 

Sharding-JDBC 操作

通过测试,在数据库中添加的数据。然后在从数据库中也做了数据的同步。刚才把 MySQL 数据同步过程做的配置。做完之后,下面就通 Sharding-JDBC 来实现对主从做完之后这个数据的操作。那怎么来做?首先第一部分要用Sharding-JDBC Sharding-JDBC 并不会做到主从的数据复制,而它做的是什么?根据语义的一个变化来让你访问不同的数据库,看刚才写的有一句话:根据语义的分析,比如所有语中有insert delete update,那这些操作它会执行主数据库,当你是 select 的操作,它就是用我们的同数据库。所以现在通过Sharding-JDBC 来建立过程。

1、配置读写分离策略

配置写法比较固定,现在做的是主从这一种特点。肯定有主从服务器。需要同步数据库是刚才配置这个叫user db 所以现在有一个主服务器,还有一个从服务器器,需要在里面配一个数据,虽然配置过了,但还需要配置一个从服务器叫s0。配置之后,Sharding-JDBC 这并不知道谁是主谁是从,需要给它做个定义,所以这里定义这叫matter data,这叫 slave data,一个是主服务器,一个是从服务器。主就是m0 从就是 s0。这是主从配置,并且起个名字叫做 ds0

spring.shardingsphere.datasource.s0.username = root.

spring.shardingsphere.datasource.s0.password = root.

# 主库从库逻辑数据源定义 ds0 user_db

spring. shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=m0

spring. shardingsphere.

sharding.master-slave-rules.ds0.slave-data-source-names=s0

# t_user 分表策略,固定分配至 ds0 t_user 真实表

spring.shardingsphere.sharding.tables.t_user.actual-data-nodes = ds0.t_user

d0 对应的数据库值里边有个主有个从。在这里写到是主库从库的逻辑数据源的定义就是它实际是m0s0,但是因为操作是同一个数据库,所有起名叫 ds0。最后写上表分布的规则,在 ds0 user ,然后对它动的操作,所以现在通过这段配置,然后实现出这个 Sharding-JDBC读写分离的这种做法,下面在代码中,把这个具体给它配置出来。

来到代码中,首先还是把之前这一个先给它复制一份,比如叫 application名字进行保留,然后在这个里边把它配置出来,给它打开。因为现在要对这个 user db 做主从,现在有user db=3306,这指的是主服务器,现在我加一个从服务器。另一个数据源的名字,比如叫这个 s0,名字可以随便起。然后定义之后,在下面这位置写上 s0 那个数据源,用它做一个修改,跟它结构是一样的,加上注释。配置那个主服务器。

#配置第三个数据源具体内容,包金连接池,驱动,地址,用户名和密码

# user_db 主服务器

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

Spring. shardingsphere. Datasource. m0. driver-class name=com mysql. cj. jdbe. Driver

Spring. shardingsphere. datasource. m0. url= jdhe:mysql://localhost:3306/user_db?serverTimezone =GMT%2B8

spring. shardingsphere. datasource.m0. username=root

spring. shardingsphere. datasource.m0.password=root

从服务器的名字叫 s0 这里边都改下,然后改完之后,后面改一下连接池,驱动,然后要改成叫3307,包括用密码,这是我们的第一份配置加一个主从的两个数据源。一个是 m0代表主服务器,这个 s0 代表从服务器。

# user_db 从服务器

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

spring. shardingsphere. datasource. s0. driver-class-nam

e=com.mysql. cj. jdbc. Driver

spring. shardingsphere. datasource. s0. url=jdbe:mysql://localhost:3307/user_db?serverTimezone =GMT%2B8

spring. shardingsphere. datasource. s0. username=root

spring. shardingsphere. datasource. s0. password=root

加上之后到第二部分,注意,因为现在有主和从就要设计一下谁是主,还有谁是从,所以需要在里面加上我们的这个配置。从word 文档中复制,复制之后有个问题是它的格式问题,需要把这格式稍微改一下,因为它这杠显示有点问题,特别注意,包括后面一样,这个需要改善。

#主库从库逻辑数据源定义 ds0 user_db

spring. shardingsphere. sharding. master-slave-rules. ds0. master-data-source-name=m0

spring. shardingsphere. sharding. master-slave-rules. ds0. slave-data-source-names=s0

现在里边两行一行叫 master-data,第二行叫 slave-data,这分别代表主服务器和从服务器。然后现在主和从对应的都是 user db 这个数据库,所以给它起个名字叫 ds0。,最后再配置一下,这个数据库和表的一个分布的一个规则。

之前它只是在 s0 中没有做主从,但是现在加上主从之后,如果还这么做,肯定是不对。因为现在是主从库的做法,所以需要把之前这配置给它去掉,然后这里边改成ds0 里面的 t-user

#配置 user_db 数据库里面 t_user 专库专表

#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m$->{0}. t_user

# t_user 分表策略,固定分配至 ds0 t_user 真实表

Spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0. t_user

#配置公共表

spring. shardingsphere. sharding. broadcast-tables=t_udict

spring.shardingsphere.sharding.tables. t_udict. key-generator. column=dictid

spring.shardingsphere.sharding.tables. t_udict. key-generator. type=SNOWFLAKE

ds0 它就表示做这个主从库里边表操作。这样的话就可以完成这个具体配置。最终还是写代码,做一个最后的测试。

然后这里强调,因为现在做这个主从是一主一从,你可以做一主多从。一主一从是这配置,如果一主多从也不复杂,看一下官网,主服务器两个从服务器每个都配置数据没有变化,然后往下看,这里边,因为现在它有一主多从,主服务器到从服务器那种规则,比如说是随机还是规则,然后最终名字叫 ms,代表主从。

2、编写测试代码

//添加操作

@Test

public void addUserDb() {

User user = new User():

user. setUsername ("lucymary"):

user.setUstatus("a"):

userMapper. insert (user):

}

首先看看主数据库是否打开,就是 3306,现在添加为了区分改一下名字叫lucymary 给它加到数据库,执行,看看是否满足读写分离的数据库机制,包括数据同步数据复制的过程。

在代码里边,我们看到 m0。对应的 3306 是主库,就是 m0 操作主库就是读写分离,然后看数据在主库里边有,连它的重数据库,因为它要做这个数据库的同步。要把这个打开重数据库,然后看里边 lucymary 就加进来了,

2.3.png

 

所以这个添加了读写分离效果。然后再试个查询,根据 I D查一下数据,通过日志看数据效果。最终成功了。目前查的数据库

2.4.png

 

s0s0 是重数据库,也就是 3307 库里的内容,所以就证明了读写分离已经生效,通过Shardding,SharddingJDBC 显现出效果,而 SharddingJDBC是通过语义的变化,做添加修改删除执行主数据库,以执行查询操作从重数据库里找到数据,最终效果为以上演示过程。到这就把 SharddingJDBC 实现读写分离操作演示完毕,过程中要掌握三部分,第一部分读写分离的概念,包括原理基于 binlog 监控过程,最后用 SharddingJDBC 在里面配置读写分离策略,编写代码完成最终测试,如果增加修改删除查询主库,如果查询操作查询重库。

以上是 SharddingJDBC 读写分离的操作。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
391 0
|
SQL 算法 Java
Myqsql使用Sharding-JDBC分表分库和读写分离 2
Myqsql使用Sharding-JDBC分表分库和读写分离
347 0
|
SQL 算法 Java
Myqsql使用Sharding-JDBC分表分库和读写分离 1
Myqsql使用Sharding-JDBC分表分库和读写分离
247 0
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
139 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
535 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
Java 关系型数据库 MySQL
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
177 0
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
86 6
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
376 4
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
100 3