文章目录

  • 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_1ss_course_db_2ss_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. 分布式数据层中间件详解:如何实现分库分表+动态数据源+读写分离

    分布式数据层中间件: 1.简介: 分布式数据访问层中间件,旨在为供一个通用数据访问层服务,支持MySQL动态数据源.读写分离.分布式唯一主键生成器.分库分表.动态化配置等功能,并且支持从客户端角度对数 ...

  2. 数据库分库分表解决方案

    数据库分库分表解决方案 前言 MySQL表大小限制 分表方案 垂直分表 水平分表 按月分表 MySQL分区表 分库方案 按业务分库 按表分库 拆分后的问题及常见的解决方案 垂直拆分 跨库Join问题 ...

  3. 分库分表解决方案之ShardingSphere

    本文来说下ShardingSphere中间件是如何来解决分库分表问题的 文章目录 概述 Sharding-JDBC简介 与常见开源产品对比 实现原理 分片规则配置 JDBC规范重写 SQL解析 SQL ...

  4. 数据库分库分表解决方案汇总

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | butterfly100 来源 | cnblo ...

  5. 分库分表解决方案之MyCat

    本文来说下分库分表的解决方案之MyCat 文章目录 概述 分布式数据存储与Mycat Mycat架构介绍 Mycat核心概念及配置 本文小结 概述 近今年里随着经济的飞速发展,企业的业务也在不断膨胀, ...

  6. mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  7. mysql 分表后如何扩展_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  8. MySQL分库分表解决方案

    一.数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严 ...

  9. ShardingSphere JDBC 分库分表 读写分离 数据加密

    简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...

最新文章

  1. linux统计文件的个数
  2. python使用sklearn的PrecisionRecallDisplay来可视化PR曲线
  3. IIS 承载的WCF服务失败
  4. 深度学习核心技术精讲100篇(八)-keras 实战系列之深度学习中的多任务学习(Multi-task learning)
  5. MySQL 随笔记录
  6. Tr A(矩阵快速幂)
  7. 201671010460朱艺璇 实验三作业互评与改进报告
  8. 20150401--Dede+搜索页面,评论
  9. NVIDIA TK1 刷机记录(1)ubuntu 14.04
  10. (原)python中matplot中获得鼠标点击的位置及显示灰度图像
  11. 【原创】高精度好题 Heaven Cow与God Bull
  12. HTML5图片上传插件
  13. 计算机师范专业发展预期,未来十年大有前途的专业,建议学生和家长多了解一下!...
  14. python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测
  15. Adaptive large neighborhood search Heuristics for the vehicle routing problem with stochastic deman
  16. anconda 下的pip路径_修改conda环境和缓存默认路径/修改Python 的 pip install 默认安装依赖路径/提高conda安装速度,其实就是改了下载源。...
  17. 【linux】重新启动项目
  18. 飞利浦 V808 android
  19. 谷歌地图下载器中地图艺术照
  20. 315MHZ PT2272-M4 非锁四路无线遥控 发射接收方案

热门文章

  1. 满满的回忆,留在了潍柴汽车(我和小福的故事之七)
  2. linux下搭建nexus私服
  3. python获取cpu温度 window_Python如何读取CPU和GPU的温度?
  4. python3从零学习-5.5.4、xdrlib — 编码与解码 XDR 数据
  5. 读书笔记-《孩子,你慢慢来(彩插新版) (龙应台人生三书)》
  6. 一文速学(二十一)-数据分析之Pandas快速图表可视化各类操作详解+实例代码(三)
  7. Tampermonkey的安装+使用教程
  8. 学习笔记:EXCEL外卖商家营业数据周报制作
  9. win10下scapy get_working_if()不能获得正确的网卡原因分析
  10. Java 实现grpc实例--json转protobuf