TSharding-ClientMybatis 分库分表组件

联合创作 · 2023-09-30 20:47

TSharding 是 应用于蘑菇街交易平台的一个简易 sharding 组件,也是一个 Mybatis 分库分表组件。



TSharding 组件目标:



  • 很少的资源投入即可开发完成


  • 支持交易订单表的Sharding需求,分库又分表


  • 支持数据源路由


  • 支持事务


  • 支持结果集合并


  • 支持读写分离



关键类:



  • 测试用例入口 com.mogujie.service.tsharding.test#TShardingTest


  • 默认走 Master 库的前缀命名 com.mogujie.trade.tsharding.route.orm.base.ReadWriteSplittingContextInitializer.DEFAULT_WRITE_METHOD_NAMES


  • SQL增强 com.mogujie.trade.tsharding.route.orm.MapperResourceEnhancer.enhancedShardingSQL



TSharding 组件接入过程:



  • 引入TSharding JAR 包


  • 配置所有分库的 JDBC 连接信息


  • Mybatis Mapper 方法参数增加 ShardingOrderPara/ShardingBuyerPara/ShardingSellerPara 注解


  • 批量查询增加结果集合并逻辑



测试用例:


跑测试用例之前先建库建表结构;理论上是8个库,512张表,每个库64张表。如果仅仅是跑测试用例,执行下面的sql就可以跑通:


create database trade0000;
create database trade0001;
create database trade0002;
create database trade0003;
create database trade0004;
create database trade0005;
create database trade0006;
create database trade0007;
create database trade;
use trade0001;
CREATE TABLE `TradeOrder0064` (
  `orderId` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `buyerUserId` bigint(20) unsigned NOT NULL COMMENT '买家的userId',
  `sellerUserId` bigint(20) unsigned NOT NULL COMMENT '卖家的userId',
  `shipTime` int(11) unsigned DEFAULT '0' COMMENT '发货时间',
  PRIMARY KEY (`orderId`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8mb4 COMMENT='订单信息表';
INSERT INTO `TradeOrder0064` (`orderId`, `buyerUserId`, `sellerUserId`, `shipTime`)
VALUES
    (50000280834672, 1234567, 2345678, 12345678);
浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报