这篇文章给大家分享的是有关如何使用sharding-jdbc实现水平分库+水平分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
分库分表策略:将id为偶数的存入到库1中,奇数存入到库2中,在每个库中,再根据学生的性别分别存到到表1和表2中。
CREATE TABLE `NewTable` ( `ID` bigint(20) NOT NULL , `NAME` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL , `AGE` int(11) NOT NULL , `GENDER` int(1) NOT NULL , PRIMARY KEY (`ID`) );
相比前面文章中,将gender性别字段设置成了int类型,方便根据性别再进行分表。
spring.main.allow-bean-definition-overriding=true # 配置Sharding-JDBC的分片策略 # 配置数据源,给数据源起名g1,g2...此处可配置多数据源 spring.shardingsphere.datasource.names=g1,g2 # 配置数据源具体内容:连接池,驱动,地址,用户名,密码 spring.shardingsphere.datasource.g1.type=com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.g1.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.g1.url=jdbc:mysql://localhost:3306/sharding_db1?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=UTC spring.shardingsphere.datasource.g1.username=root spring.shardingsphere.datasource.g1.password=123456 spring.shardingsphere.datasource.g2.type=com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.g2.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.g2.url=jdbc:mysql://localhost:3306/sharding_db2?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=UTC spring.shardingsphere.datasource.g2.username=root spring.shardingsphere.datasource.g2.password=123456 # 配置数据库的分布,表的分布 spring.shardingsphere.sharding.tables.student.actual-data-nodes=g$->{1..2}.student_$->{1..2} # 指定student表 主键gid 生成策略为 SNOWFLAKE spring.shardingsphere.sharding.tables.student.key-generator.column=id spring.shardingsphere.sharding.tables.student.key-generator.type=SNOWFLAKE # 指定数据库分片策略 约定id值是偶数添加到sharding_db1中,奇数添加到sharding_db2中 spring.shardingsphere.sharding.tables.student.database-strategy.inline.sharding-column=id spring.shardingsphere.sharding.tables.student.database-strategy.inline.algorithm-expression=g$->{id % 2 + 1} # 指定表分片策略 约定gender值是0添加到student_1表,如果gender是1添加到student_2表 spring.shardingsphere.sharding.tables.student.table-strategy.inline.sharding-column=gender spring.shardingsphere.sharding.tables.student.table-strategy.inline.algorithm-expression=student_$->{gender % 2 + 1} # 打开sql输出日志 spring.shardingsphere.props.sql.show=true
配置多个数据源时,使用逗号隔开,分别配置其属性。除了配置表分片策略,还需配置库分配策略。
@SpringBootTest class ShardingJdbcDemoApplicationTests { @Autowired private StudentMapper studentMapper; @Test public void test01() { for (int i = 0; i < 15; i++) { Student student = new Student(); student.setName("wuwl"); student.setAge(27); student.setGender(i%2); studentMapper.insert(student); } } }
运行效果:
看样子是成功了,查看数据库数据。
sharding_db1.student_1:
sharding_db1.student_2:
sharding_db2.student_1:
sharding_db2.student_2:
感谢各位的阅读!关于“如何使用sharding-jdbc实现水平分库+水平分表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。