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);
浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

编辑 分享
举报