基于ShardingJDBC的分库分表及读写分离整理
ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下:

sharding官网
https://shardingsphere.apache.org/document/legacy/3.x/document/cn/overview/
- 基于ShardingJDBC的读写分离
maven依赖配置
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.0.0.M3</version>
</dependency>
数据源配置
#数据源名称,多数据源以逗号分隔
sharding.jdbc.datasource.names=ds-0,ds-1,ds-2
#未配置分片规则的表将通过默认数据源定位-适用于单库单表,该表无需配置分片规则
spring.shardingsphere.sharding.default-data-source-name=ds0
#ds-0
sharding.jdbc.datasource.ds-0.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-0.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-0.url=jdbc:mysql://192.168.237.162:3306/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-0.username=root
sharding.jdbc.datasource.ds-0.password=admindev123$%^
#ds-1
sharding.jdbc.datasource.ds-1.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-1.url=jdbc:mysql://192.168.237.162:3307/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-1.username=root
sharding.jdbc.datasource.ds-1.password=admindev123$%^
#ds-2
sharding.jdbc.datasource.ds-2.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-2.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-2.url=jdbc:mysql://192.168.237.162:3308/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-2.username=root
sharding.jdbc.datasource.ds-2.password=admindev123$%^
sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=ds-0
sharding.jdbc.config.masterslave.slave-data-source-names=ds-2,ds-1
#是否开启SQL显示,默认值: false
spring.shardingsphere.props.sql.show= true
1主2从数据库测试

查询

新增

- 于ShardingJDBC的单库分片
#数据源名称,多数据源以逗号分隔
#这里是给取的别名,下面配置要使用
sharding.jdbc.datasource.names=ds-0
#未配置分片规则的表将通过默认数据源定位-适用于单库单表,该表无需配置分片规则
#spring.shardingsphere.sharding.default-data-source-name=ds0
#ds-0
sharding.jdbc.datasource.ds-0.type=org.apache.commons.dbcp2.BasicDataSource
sharding.jdbc.datasource.ds-0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-0.url=jdbc:mysql://192.168.237.162:3306/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-0.username=root
sharding.jdbc.datasource.ds-0.password=admindev123$%^
#分表相关配置 note是我数据库要分表的表前缀,ds.f_licensecreatorparams_000$->{0..1}这里表示ds数据库中的f_licensecreatorparams_0000,f_licensecreatorparams_0001两个表
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.actual-data-nodes=ds-0.f_licensecreatorparams_000$->{0..2}
## 配置分表策略
## 配置分片算法
#指定f_licensecreatorparams表中主键的生成策略 SNOWFLAKE:雪花算法,随机生成主键Id
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.key-generator-column-name=id
spring.shardingsphere.sharding.tables.f_licensecreatorparams.key-generator.type=SNOWFLAKE
# 指定分片的策略
# 分片健
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.table-strategy.inline.sharding-column=id
# 分片算法(分了3张表 id % 3)
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.table-strategy.inline.algorithm-expression=f_licensecreatorparams_000$->{id % 3}
#sharding.jdbc.config.sharding.binding-tables=f_licensecreatorparams
出现的问题解决
问题一:
Springboot 的 autoconfiguration 中 datasource 与 shardingjdbc 的datasource 冲突,导致sharding jdbc 的datasource 注入失败
解决办法:
在配置文件(application.yml)中设置允许 重复名称 bean 覆盖,这样让后面配置的sharding jdbc 的datasource 覆盖掉 springboot 的 autoconfiguration的datasource
spring.main.allow-bean-definition-overriding: true
基于ShardingJDBC的分库分表及读写分离整理的更多相关文章
- Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离
结合上一篇docker部署的mysql主从, 本篇主要讲解SpringBoot项目结合Sharding-JDBC如何实现分库分表.读写分离. 一.Sharding-JDBC介绍 1.这里引用官网上的介 ...
- 阿里P8架构师谈:数据库分库分表、读写分离的原理实现,使用场景
本文转载自:阿里P8架构师谈:数据库分库分表.读写分离的原理实现,使用场景 为什么要分库分表和读写分离? 类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,日益增长的业务数据,无疑对 ...
- 使用ShardingSphere-JDBC完成Mysql的分库分表和读写分离
1. 概述 老话说的好:选择比努力更重要,如果选错了道路,就很难成功. 言归正传,之前我们聊了使用 MyCat 实现Mysql的分库分表和读写分离,MyCat是服务端的代理,使用MyCat的好处显而易 ...
- 基于ShardingJDBC的分库分表详细整理
转载 https://www.cnblogs.com/jackion5/p/13658615.html 前言 传统应用项目设计通常都是采用单一数据库作为存储方案,但是随着互联网的迅猛发展以及应用数据量 ...
- Mycat使用--分库分表和读写分离
Mycat分库分表读写分离 1. 模拟多数据库节点 2. 配置文件 具体操作参看: https://blog.csdn.net/vbirdbest/article/details/83448757 写 ...
- ShardingSphere-proxy-5.0.0企业级分库分表、读写分离、负载均衡、雪花算法、取模算法整合(八)
一.简要说明 以下配置实现了: 1.分库分表 2.每一个分库的读写分离 3.读库负载均衡算法 4.雪花算法,生成唯一id 5.字段取模 二.配置项 # # Licensed to the Apache ...
- 分库分表、读写分离——用Sql和ORM(EF)来实现
分库:将海量数据分成多个库保存,比如:2017年的订单库——Order2017,2018年的订单库——Order2018... 分表:水平分表(Order拆成Order1.....12).垂直分表(O ...
- 采用Sharding-JDBC解决分库分表
源码:Sharding-JDBC(分库分表) 一.Sharding-JDBC介绍 1,介绍 Sharding-JDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被 ...
- .net core 基于Dapper 的分库分表开源框架(core-data)
一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...
随机推荐
- 【阿菜做实践】利用go语言写一个简单的Pow样例
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...
- Mysql脚本 生成测试数据
使用: ./xie.sh -uroot -p'123456' #!/bin/bash #混合测试数据库脚本 #将创建一个single数据库,其中创建一个s1表 #如果数据库存在,将会写入数据,可以在写 ...
- apt和apt-get的区别
目录 一.简介 二.apt vs apt-get 为什么apt首先被引入? apt和apt-get之间的区别 apt和apt-get命令之间的区别 我应该使用apt还是apt-get? 三.结论 一. ...
- typescript接口---interface
假如我现在需要批量生产一批对象,这些对象有相同的属性,并且对应属性值的数据类型一致.该怎么去做? 在ts中,因为要检验数据类型,所以必须对每个变量进行规范,自然也提供了一种批量规范的功能.这个功能就是 ...
- vue双向绑定和深浅拷贝
现象描述: vue 在使用的时候,当table绑定了某个data的时候.假如某个el-table-column下面的有个方法传参(data.row),然后在方法中用一个obj=data.row.(这里 ...
- python内置模块(一)
re模块 基本操作方法 1.使用findall方法可以根据正则表达式筛选所有符合的字符.基本句式为: re.findall('正则表达式',待匹配的字符) 结果为一个列表,没有结果为空列表. 2.使用 ...
- [BUUCTF]PWN——CmmC_Simplerop
cmcc_simplerop 附件 步骤 例行检查,32位,开启了nx保护 本地试运行一下程序,查看一下大概的情况 32位ida载入,习惯性的检索程序里的字符串,看了个寂寞,从main函数开始看程序 ...
- Redis篇:持久化、淘汰策略,缓存失效策略
关注公众号,一起交流,微信搜一搜: 潜行前行 redis 持久化 redis 的数据是保存再系统内存里面的.持久化就是把内存的数据转移到磁盘中,redis 的持久化策略有两种:RDB.AOF RDB ...
- CSS的三大特性(继承、层叠和优先级)
CSS的三大特性(继承.层叠和优先级) 1.css属性的继承 CSS中有些属性是可继承的,何为属性的继承? 一个元素如果没有设置某些属性的值,就会跟随(继承)父元素的属性值.当然,一个元素如果有设置自 ...
- Git差异并列显示
默认的git diff命令只会将文件的修改差异使用"+","-"符号标注出来,并不直观. 最理想的方式应该是使用诸如"DiffMerge"这 ...