你拍一我拍一,分布式事务听一听(一)
常用分库分表策略
常见库路由策略:
- 以userID分库(最常见也是最有效的分库方式)
-
以用户行政地域分库(地域一般是410000等形式)
-
userID + region区域 复合使用
常见表路由策略:
Range分片
- 以业务表ID 取mod分表
-
•以ID区间路由,如[0-10000000]写入table_0
-
以业务表日期区间进行路由,如:table_202004(适合数据归档业务场景,本质是冷热分离)
Hash分片
- 多字段组合路由,hash(key0,key1,key2...) + mod
-
一致性hash:hash mod 2^32-1
常用分布式全局唯一主键策略
- UUID
-
日期(8位)+平台ID(2位)+支付方式(2位)+原子自增(6位)
-
雪花算法
-
大公司的主键生成服务(如美团的Leaf)
Sharding分库分表自定义分布式主键策略
原理:SPI (service provider interface服务提供接口)
实现:在resources下创建META-INF/services目录
创建文件:org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator
在文件当中配置你自己的主键生成Java文件包路径
如:com.zhangjiang.zhangjiangmall.spi.OrderByRedisKeyGenerator
XA原理与实现
XA:核心原理是2PC两阶段提交
实现框架
- Atomikos(sharding默认使用)
- bitronix
- narayana

开启XA事务
1、引入XA事务依赖包
1 <dependency> 2 3 <groupId>org.apache.shardingsphere</groupId> 4 5 <artifactId>sharding-transaction-xa-core</artifactId> 6 7 <version>4.0.0</version> 8 9 <exclusions> 10 11 <exclusion> 12 13 <artifactId>slf4j-api</artifactId> 14 15 <groupId>org.slf4j</groupId> 16 17 </exclusion> 18 19 </exclusions> 20 21 </dependency>
2、开启分布式事务
TransactionTypeHolder.set(TransactionType.XA);

浙公网安备 33010602011771号