前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库魔法师:使用ShardingSphere实现MySQL读写分离与分片指南跟着爆叔的节奏稳了!

数据库魔法师:使用ShardingSphere实现MySQL读写分离与分片指南跟着爆叔的节奏稳了!

原创
作者头像
杨不易呀
修改2023-10-04 13:21:10
3940
修改2023-10-04 13:21:10
举报
文章被收录于专栏:杨不易呀杨不易呀

前言

在进行阅读本文当中的内容之前首先你得要有主从复制的 MySQL 环境,可参考4.这篇MySQL主从复制与分库分表读取分离稳了!进行搭建

读写分离

官方文档:https://shardingsphere.apache.org/document/5.0.0-beta/cn/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting

然后我们在将 application.properties 替换成官方文档当中给出的读写分离相关配置即可,配置项说明在官方文档当中都说明了,博主就是将说明的内容替换成了真实的具体的内容,供参考即可:

创建表

t_order:

代码语言:sql
复制
CREATE TABLE `t_order` (
  `tid` bigint(20) NOT NULL,
  `tname` varchar(255) DEFAULT NULL,
  `goods_id` bigint(20) DEFAULT NULL,
  `tstatus` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码语言:text
复制
# 配置真实数据源
spring.shardingsphere.datasource.names=master,slave01
# 配置第 1 个数据源
spring.shardingsphere.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.master.url=jdbc:mysql://127.0.0.1:3307/test?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=root
# 配置第 2 个数据源
spring.shardingsphere.datasource.slave01.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.slave01.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.slave01.url=jdbc:mysql://127.0.0.1:3308/test?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.slave01.username=root
spring.shardingsphere.datasource.slave01.password=root
# 主键生成策略
spring.shardingsphere.rules.readwrite-splitting.data-sources.pr_ds.write-data-source-name=master
spring.shardingsphere.rules.readwrite-splitting.data-sources.pr_ds.read-data-source-names=slave01
spring.shardingsphere.rules.readwrite-splitting.data-sources.pr_ds.load-balancer-name=round-robin
spring.shardingsphere.rules.readwrite-splitting.load-balancers.round-robin.type=ROUND_ROBIN
# 打印执行sql
spring.shardingsphere.props.sql-show=true

如上配置文件当中的负载均衡算法博主采用的是官方当中内置提供的,可配置属性官方当中给出的可以是无,所以博主这里去掉了,readwrite-splitting-data-source-name 可以先使用内置的也就是 pr_ds 如果后面要做读写分离与分片的话可能就需要自行修改了,其它的就没啥东西就在解释的了:

配置完毕之后,然后我们运行插入数据的测试代码,运行结果如下:

发现,都是往主库当中进行写的,那么就说明我们配置的读写分离已经生效了,然后我们在任意运行一个查询语句看看它是否是去从库当中进行查询即可:

发现,发送的 SQL 语句是去从,slave01 当中进行查询了说明已经成功了。

分片

读写分离的情况下进行分片,就是分表存储操作,那么该如何实现呢,当然了,要实现读写分离加分片前提条件就是你需要上一面当中所搭建好的读写分离结构,然后就是把博主之前讲解的分片操作相关配置拿进来即可,基于上一面当中的 application.properties 的内容在添加分片相关的配置,分片配置如下:

代码语言:text
复制
# 负载均衡算法配置
spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
# 配置t_order真实表规则
spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds0.t_order_$->{0..1}
# 配置分表策略 主键+分片算法
spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=tid
spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=table-inline
# 配置 分片算法
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.props.algorithm-expression=t_order_$->{tid % 2}
# 主键盘生成策略
spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.column=tid
spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.key-generator-name=snowflake
spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE
spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=1

然后需要修改一下读写分离的数据源名称即可:

如上的配置含义就是说在主从的模式下,它是一个整体,因为你改变了主当中的信息从库当中会自动进行同步,所以就是一个整体,以后如果你还有其它的主从数据库,你在配置一个即可,例如,我现在配置的是 test, 如果以后你有一个 ds0 你就在配置一下数据源关于 ds0 的即可。

测试

插入数据:

查询数据:

ok,到了这里基本上差不多就这些内容了,插入是往主库当中进行插入的,查询是从从库当中进行查询的,已经成功了。

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

我正在参与 腾讯云开发者社区数据库专题有奖征文。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 读写分离
    • 创建表
    • 分片
    • 测试
    • 最后
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档