400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

ShardingJDBC如何分库分表?看完你就会了

Sharding JDBC的操作分为配置使用、读写分离、分库分表以及应用等,今天我们主要来了解一下关于分库分表的操作,如果你对此感兴趣的话,那我们就开始吧。
环境准备
pom.xml

org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE


1.8
3.1.0



io.shardingsphere
sharding-jdbc-core
${sharding.version}

创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为隆化企业提供专业的做网站、成都做网站,隆化网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。


    io.shardingsphere
    sharding-jdbc-spring-boot-starter
    ${sharding.version}



    com.alibaba
    druid
    1.1.10



    org.mybatis
    mybatis
    3.4.5



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.1



    MySQL
    mysql-connector-java
    5.1.46



    org.springframework.boot
    spring-boot-starter



    org.projectlombok
    lombok



    org.springframework.boot
    spring-boot-starter-test
    test




org.springframework.boot
spring-boot-maven-plugin


domain
// 建立domain@Setter@Getter@ToString@NoArgsConstructor@AllArgsConstructorpublic class Employee {
private Long id;
private String name;}
配置类
@SpringBootApplication@MapperScan("cn.wolfcode.sharding.mapper")public class ShardingApplication { }
分库分表
案例模型
把数据分别存放在两台服务器的两个数据库中表,通过分片算法来决定当前的数据存放在哪个数据库的哪个表中,由于一个连接池只能连接一个特定的数据库,所以这里需要创建多个连接池对象
建表
-- 分别在2台服务器中建立数据库sharding,并且建表employee_0和employee_1CREATE TABLE employee_0 (
id bigint(20) PRIMARY KEY AUTO_INCREMENT,
name varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ###################################CREATE TABLE employee_1 (
id bigint(20) PRIMARY KEY AUTO_INCREMENT,
name varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
application.properties

定义连接池

sharding.jdbc.datasource.names=db0,db1

格式sharding.jdbc.datasource.连接池名.xxx:设置4要素信息

sharding.jdbc.datasource.db0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.db0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.db0.url=jdbc:mysql://db0Ip:port/sharing
sharding.jdbc.datasource.db0.username=xxx
sharding.jdbc.datasource.db0.password=xxx

sharding.jdbc.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.db1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.db1.url=jdbc:mysql://db1Ip:port/sharing
sharding.jdbc.datasource.db1.username=xxx
sharding.jdbc.datasource.db1.password=xxx

设置分库规则

sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column:分库列

sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression:分库算法

sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=db$->{id % 2}

绑定逻辑表

sharding.jdbc.config.sharding.binding-tables=employee

设置分表规则

sharding.jdbc.config.sharding.tables.逻辑表.actual-data-nodes:逻辑表对应的真实表

sharding.jdbc.config.sharding.tables.逻辑表.table-strategy.inline.sharding-column:分表列

sharding.jdbc.config.sharding.tables.逻辑表.table-strategy.inline.algorithm-expression:分表算法

sharding.jdbc.config.sharding.tables.逻辑表.key-generator-column-name:主键列

sharding.jdbc.config.sharding.tables.employee.actual-data-nodes=db$->{0..1}.employee$->{0..1}
sharding.jdbc.config.sharding.tables.employee.table-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.tables.employee.table-strategy.inline.algorithm-expression=employee
$->{id % 2}
sharding.jdbc.config.sharding.tables.employee.key-generator-column-name=id

打印日志

sharding.jdbc.config.props.sql.show=true
mapper
/**

看完这些操作后不妨自己去试试,实践才能检验真知,如果遇到了问题,也可以及时向我询问,我也会尽我所力帮助你。


当前标题:ShardingJDBC如何分库分表?看完你就会了
文章分享:http://mbwzsj.com/article/gohigc.html

其他资讯

让你的专属顾问为你服务