当前位置:网站首页>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);
}
边栏推荐
- The difference between h264 and h265 decoding
- 加密传输过程
- MySQL中substring与substr区别
- C language force buckles the rotating image of the 48th question.auxiliary array
- DNS resolution process [visit website]
- Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
- MySQL数据库面试题总结(2022最新版)
- 【Multithreading】
- [Yugong Series] July 2022 Go Teaching Course 016-Logical Operators and Other Operators of Operators
- 对象集合去重的方法
猜你喜欢
【Demo】ABAP Base64加解密测试
How to solve the error of joiplay simulator
Encapsulate and obtain system user information, roles and permission control
Oracle一个诡异的临时表空间不足的问题
xss bypass: prompt(1)
ES 中时间日期类型 “yyyy-MM-dd HHmmss” 的完全避坑指南
消息队列存储消息数据的MySQL表设计
Mysql systemized JOIN operation example analysis
作业:iptables防止nmap扫描以及binlog
WMware Tools安装失败segmentation fault解决方法
随机推荐
MySQL系列一:账号管理与引擎
MySQL Series 1: Account Management and Engine
Oracle has a weird temporary table space shortage problem
SereTOD2022 Track2 Code Analysis - Task-based Dialogue Systems Challenge for Semi-Supervised and Reinforcement Learning
MySQL数据库面试题总结(2022最新版)
【Demo】ABAP Base64加解密测试
Jmeter参数传递方式(token传递,接口关联等)
registers (assembly language)
PHP图片添加文字水印
BOM系列之Navigator对象
redis学习
Xss target drone training [success when pop-up window is realized]
数据库的严格模式
Homework: iptables prevent nmap scan and binlog
Bypass of xss
网络常用的状态码
DATA AI Summit 2022提及到的对 aggregate 的优化
Add text watermark to PHP image
xss靶机训练【实现弹窗即成功】
Meeting OA project pending meeting, all meeting functions