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

2020-02-14  本文已影响0人  javap

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

上一篇 下一篇

猜你喜欢

热点阅读