美文网首页
TB级数据分库分表之Sharding-jdbc配置解读(二)

TB级数据分库分表之Sharding-jdbc配置解读(二)

作者: javap | 来源:发表于2020-02-14 21:04 被阅读0次

    Sharding-jdbc的强大方便在于,在配置得当的情况下,代码层次无需任何的改动,与传统的编码格式一致,所以代码非常整洁干练。

    SpringBoot引入Maven工程jar包依赖

    <!-- https://mvnrepository.com/artifact/io.shardingsphere/sharding-jdbc-spring-boot-starter -->
    <dependency>
       <groupId>io.shardingsphere</groupId>
       <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
       <version>3.1.0</version>
    </dependency>
    

    Sharding-jdbc配置解读

    // 注意:这里只是为了区分,真实的环境可在不同服务器,数据库名一致都是ds
    sharding.jdbc.datasource.names=ds0,ds1

    数据源ds0
    sharding.jdbc.datasource.ds0.type=com.mysql.cj.jdbc.MysqlDataSource
    sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
    sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
    sharding.jdbc.datasource.ds0.user=root
    sharding.jdbc.datasource.ds0.password=root
    
    数据源ds1
    sharding.jdbc.datasource.ds1.type=com.mysql.cj.jdbc.MysqlDataSource
    sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
    sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
    sharding.jdbc.datasource.ds1.user=root
    sharding.jdbc.datasource.ds1.password=root
    
    分库策略 注:分库ID不能与分表ID一样
    // 操作哪个库 是由user_id因素来决策的
    sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
    // user_id % 2 决定了操作哪个库
    sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
    
    分表策略
    sharding.jdbc.config.sharding.tables.t_order.logic-table=t_order
    // 操作哪张表 是由order_id因素来决策的
    sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
    // order_id % 2 决定了操作哪张表
    sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 2}
    
    附加配置
    // 绑定表(操作一张表数据同时,另一种绑定表也会添加数据) 绑定表可以理解为关联表,配置中可配置与哪个库中的那哪张表进行关联绑定。
    sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item
    // 广播表(操作时 N个库 数据同步)
    sharding.jdbc.config.sharding.broadcast-tables=city
    

    Sharding-jdbc 数据源读写分离配置

    sharding.jdbc.config.masterslave.name=dataSource
    // 负载均衡器(默认:round-robin)
    sharding.jdbc.config.masterslave.load-balance-algorithm-type=round-robin
    sharding.jdbc.config.masterslave.name
    sharding.jdbc.config.masterslave.master-data-source-name=ds0     
    sharding.jdbc.config.masterslave.slave-data-source-names=ds1,ds2
    

    分布式ID主键生成策略

    // 如果自定义生成分布式ID,实现KeyGenerator接口,引入自定义类路径
    sharding.jdbc.config.sharding.tables_t_order.key-generator-class-name=io.shardingsphere.core.keygen.DefaultKeyGenerator
    sharding.jdbc.config.sharding.tables_t_order.key-generator-column-name=id 
    // 注:Sharding-jdbc默认的分布式ID生成策略是Twitter的snowflake(雪花算法)
    DefaultKeyGenerator defaultKeyGenerator = new DefaultKeyGenerator();
    defaultKeyGenerator.generatorKey();
    

    Sharding-jdbc分布式事务

    <dependency>
        <groupId>io.shardingsphere</groupId>
        <artifactId>sharding-transaction-2pc-xa</artifactId>
        <version>3.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.shardingsphere</groupId>
        <artifactId>sharding-transaction-spring</artifactId>
        <version>3.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
        <version>3.1.0</version>
    </dependency>
    

    目前市面上所用的还在持续更新的事务:atomikos
    使用方式:需要添加的类上添加 @Transaction与@ShardingTransactionType(TransactionType.XA/LOCAL/BASE)
    XA:多数据源分布式事务(缺陷:异常可以回滚但宕机或网络中断无法回滚)
    LOCAL:单数据源本地事务(缺陷:异常数据不一致)
    BASE:柔性事务 版本4.x才会完善更新有柔性事务

    行表达式语法

    1. 范围型:${begin ...end}
    2. 枚举型:${[n1,n2,n3]}

    例1: {['user','order']}_table{1 ...3} 解析 user_table1 user_table2 user_table3 order_table1 order_table2 order_table3
    例2: db0_user{0,1},db1_user{0,1} 解析 db0_user0 db0_user2 db1_user0 db1_user2

    相关文章

      网友评论

          本文标题:TB级数据分库分表之Sharding-jdbc配置解读(二)

          本文链接:https://www.haomeiwen.com/subject/dywjfhtx.html