当前位置:网站首页>ShardingSphere之水平分库实战(四)
ShardingSphere之水平分库实战(四)
2022-07-31 00:40:00 【融极】
概述
场景
创建两个数据库
环境搭建
建库、建表
CREATE TABLE `course_1` (
`cid` bigint(20) NOT NULL,
`cname` varchar(50) NOT NULL,
`user_id` bigint(20) NOT NULL,
`cstatus` varchar(10) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
springboot环境搭建
配置分片规则
# 配置分片策略
# 配置数据源
spring.shardingsphere.datasource.names=m1,m2
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=123456
# 指定course表分布情况,配置表在哪个数据库中,表名称都是什么
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->{
1..2}.course_$->{
1..2}
# 指定course主键cid生成策略SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
# 指定表分片策略, cid是偶数添加到course_1表中,cid是奇数添加到course_2
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{
cid % 2 + 1}
# 指定库的中course表的分片策略
spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->{
user_id % 2 + 1}
# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
# 解决一个Course实体类不能对应两张表的问题
spring.main.allow-bean-definition-overriding=true
编写测试代码
@Test
void addFk() {
for (int i = 0; i < 10; i++) {
Course course = new Course();
course.setCname("java");
course.setUserId(101L);
course.setCstatus("normal");
courseMapper.insertSelective(course);
}
}
@Test
public void findCourseDb() {
Example example = new Example(Course.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId", 100L);
criteria.andEqualTo("cid", 760185728628948993L);
Course course = courseMapper.selectOneByExample(example);
System.out.println(course);
}
边栏推荐
猜你喜欢
MySQL database (basic)
encrypted transmission process
Summary of MySQL database interview questions (2022 latest version)
Oracle一个诡异的临时表空间不足的问题
【c语言课程设计】C语言校园卡管理系统
[In-depth and easy-to-follow FPGA learning 15---------- Timing analysis basics]
【深入浅出玩转FPGA学习13-----------测试用例设计1】
mysql索引失效的常见9种原因详解
加密传输过程
【深入浅出玩转FPGA学习15----------时序分析基础】
随机推荐
【Yugong Series】July 2022 Go Teaching Course 013-Constants, Pointers
ELK部署脚本---亲测可用
MySQL master-slave replication and read-write separation script - pro test available
XSS related knowledge
[Yugong Series] July 2022 Go Teaching Course 016-Logical Operators and Other Operators of Operators
解决:Parameter 0 of method ribbonServerList in com.alibaba.cloud.nacos.ribbon.NacosRibbonClientConfigu
【深入浅出玩转FPGA学习14----------测试用例设计2】
How to adjust Chinese in joiplay simulator
消息队列存储消息数据的MySQL表设计
How to solve types joiplay simulator does not support this game
What is Promise?What is the principle of Promise?How to use Promises?
[C language course design] C language campus card management system
Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
Consistency and Consensus of Distributed Systems (1) - Overview
Mysql systemized JOIN operation example analysis
Go study notes (84) - Go project directory structure
Niuke.com question brushing training (4)
Shell programming of conditional statements
不用Swagger,那我用啥?
BOM系列之history对象