ShardingSphere 5.0.0-alpha 分库分表解决方案(五)——读写分离
文章目录
- 1. ShardingSphere-JDBC 读写分离
- 1.1 环境搭建
- 1.1.1 pom.xml
- 1.1.2 创建数据库和表
- 1.1.3 编写业务代码
- 1.1.4 配置文件
- 1.1.5 测试结果
- 2. 说明
- 3.坑
1. ShardingSphere-JDBC 读写分离
读写分离:写数据往主库写,读数据从从库读。
1.1 环境搭建
环境说明:
SpringBoot 2.5.7
+MyBatisPlus
+ShardingSphere-JDBC 5.0.0-alpha
+Druid
+MySQL 8.0
1.1.1 pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.13</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
1.1.2 创建数据库和表
按照水平分表的方式,创建数据库和数据库表
- 创建数据库:
ss_course_db_1
、ss_course_db_2
、ss_dict_db
- 具体操作,可以参考前面两篇文章
对三个数据库都进行了主从配置,但此处只用读写分离,还不涉及分库分表,所有只涉及ss_dict_db数据库
对于配置多个数据库的主从配置,需要在MySQL的my.ini文件中,配置同步多个数据库即可,配置如下,主从配置文件都要加。
binlog-do-db=ss_dict_db
binlog-do-db=ss_course_db_1
binlog-do-db=ss_course_db_2
1.1.3 编写业务代码
此处编写业务代码略,具体代码可以下面的源码地址,经过本人调试过。代码里集成了Swagger
,用于方便测试。
1.1.4 配置文件
server.port=8004spring.shardingsphere.enabled=true
# 打开sql输出日志
spring.shardingsphere.props.sql-show=true# 配置数据源,给数据源起名称
spring.shardingsphere.datasource.names=m1,m2# 配置第一个数据源具,主数据库
spring.shardingsphere.datasource.common.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.common.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.url=jdbc:mysql://127.0.0.1:3306/ss_dict_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456# 配置第二个数据源,从数据库
spring.shardingsphere.datasource.m2.url=jdbc:mysql://127.0.0.1:3307/ss_dict_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=root# 负载均衡算法
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.type=ROUND_ROBIN
# 不配置此项会报错
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.props.default=0
# 主库
spring.shardingsphere.rules.replica-query.data-sources.prds.primary-data-source-name=m1# 从库
spring.shardingsphere.rules.replica-query.data-sources.prds.replica-data-source-names=m2
spring.shardingsphere.rules.replica-query.data-sources.prds.load-balancer-name=round_robin
1.1.5 测试结果
启动程序,在浏览器输入:http://localhost:8004/swagger-ui.html
初始时数据:3306为主库,3307为从库
添加公共数据
日志打印只向m1数据源中插入数据,即3306主数据库。
查看数据库表数据
查看所有数据
日志显示,只从m2数据源查询,即3307从数据库。
2. 说明
源码地址:https://github.com/Hofanking/springboot-shardingsphere-example
源代码目录结构说明:
springboot-shardingsphere-example
|— shardingsphere-database (分库分表)
|— shardingsphere-database-table-write-read (分库分表读写分离)
|— shardingsphere-proxy-table (使用proxy分表)
|— shardingsphere-public (公共表)
|— shardingsphere-table (分表)
|— shardingsphere-write-read (读写分离)
3.坑
下面是官方文档读写分离的配置说明:
https://shardingsphere.apache.org/document/5.0.0-alpha/cn/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/replica-query/
按照上面的配置,根本不会成功,<replica-query-data-source-name>
对应的地方要写成prds
。具体可以查看对应版本的github
仓库代码。
https://github.com/apache/shardingsphere/blob/5.0.0-alpha/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example/src/main/resources/application-replica-query.properties
ShardingSphere 5.0.0-alpha 分库分表解决方案(五)——读写分离相关推荐
- 分布式数据层中间件详解:如何实现分库分表+动态数据源+读写分离
分布式数据层中间件: 1.简介: 分布式数据访问层中间件,旨在为供一个通用数据访问层服务,支持MySQL动态数据源.读写分离.分布式唯一主键生成器.分库分表.动态化配置等功能,并且支持从客户端角度对数 ...
- 数据库分库分表解决方案
数据库分库分表解决方案 前言 MySQL表大小限制 分表方案 垂直分表 水平分表 按月分表 MySQL分区表 分库方案 按业务分库 按表分库 拆分后的问题及常见的解决方案 垂直拆分 跨库Join问题 ...
- 分库分表解决方案之ShardingSphere
本文来说下ShardingSphere中间件是如何来解决分库分表问题的 文章目录 概述 Sharding-JDBC简介 与常见开源产品对比 实现原理 分片规则配置 JDBC规范重写 SQL解析 SQL ...
- 数据库分库分表解决方案汇总
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | butterfly100 来源 | cnblo ...
- 分库分表解决方案之MyCat
本文来说下分库分表的解决方案之MyCat 文章目录 概述 分布式数据存储与Mycat Mycat架构介绍 Mycat核心概念及配置 本文小结 概述 近今年里随着经济的飞速发展,企业的业务也在不断膨胀, ...
- mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结
从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...
- mysql 分表后如何扩展_MySQL横向扩展-分库分表解决方案总结
从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...
- MySQL分库分表解决方案
一.数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严 ...
- ShardingSphere JDBC 分库分表 读写分离 数据加密
简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...
最新文章
- linux统计文件的个数
- python使用sklearn的PrecisionRecallDisplay来可视化PR曲线
- IIS 承载的WCF服务失败
- 深度学习核心技术精讲100篇(八)-keras 实战系列之深度学习中的多任务学习(Multi-task learning)
- MySQL 随笔记录
- Tr A(矩阵快速幂)
- 201671010460朱艺璇 实验三作业互评与改进报告
- 20150401--Dede+搜索页面,评论
- NVIDIA TK1 刷机记录(1)ubuntu 14.04
- (原)python中matplot中获得鼠标点击的位置及显示灰度图像
- 【原创】高精度好题 Heaven Cow与God Bull
- HTML5图片上传插件
- 计算机师范专业发展预期,未来十年大有前途的专业,建议学生和家长多了解一下!...
- python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测
- Adaptive large neighborhood search Heuristics for the vehicle routing problem with stochastic deman
- anconda 下的pip路径_修改conda环境和缓存默认路径/修改Python 的 pip install 默认安装依赖路径/提高conda安装速度,其实就是改了下载源。...
- 【linux】重新启动项目
- 飞利浦 V808 android
- 谷歌地图下载器中地图艺术照
- 315MHZ PT2272-M4 非锁四路无线遥控 发射接收方案
热门文章
- 满满的回忆,留在了潍柴汽车(我和小福的故事之七)
- linux下搭建nexus私服
- python获取cpu温度 window_Python如何读取CPU和GPU的温度?
- python3从零学习-5.5.4、xdrlib — 编码与解码 XDR 数据
- 读书笔记-《孩子,你慢慢来(彩插新版) (龙应台人生三书)》
- 一文速学(二十一)-数据分析之Pandas快速图表可视化各类操作详解+实例代码(三)
- Tampermonkey的安装+使用教程
- 学习笔记:EXCEL外卖商家营业数据周报制作
- win10下scapy get_working_if()不能获得正确的网卡原因分析
- Java 实现grpc实例--json转protobuf