首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >腾讯云 MySQL 分库分表承载海量竞拍保证金订单(Java MyBatis 完整代码)

腾讯云 MySQL 分库分表承载海量竞拍保证金订单(Java MyBatis 完整代码)

原创
作者头像
用户12576458
发布2026-06-27 10:32:24
发布2026-06-27 10:32:24
760
举报

标题:云 MySQL 读写分离 + 分表|Bidfins 雅虎代拍资金库性能优化实战

摘要

Bidfins 海量雅虎代拍订单、用户保证金流水单表突破 3000 万,查询卡顿严重。本文采用腾讯云 MySQL 一主四只读架构,按月 + 用户哈希双分表策略,提供保证金并发扣减、账单查询 Java 代码,财务对账速度提升 8.7 倍。

一、数据库瓶颈

1. 保证金并发更新行锁冲突,出价高峰期超时;

2. 历史订单多维度索引失效,报表查询耗时 15s+;

3. 冷热数据混合存储,IO 负载居高不下。

二、优化方案

1. 垂直分库:资金库、竞拍订单库、仓储 WMS 库独立实例;

2. 竞拍订单按 user_id 哈希分 32 张子表,账单按月分表;

3. 一主多读写分离,报表、用户查询全部走只读节点。

三、核心 Java 代码

1)分表实体

java

运行

@TableName("t_bid_order_${month}")public class YahooBidOrder {

    private Long id;

    private Long userId;

    private String itemId;

    private Integer bidType; //1雅虎 2煤炉

    private BigDecimal priceJpy;

    private Integer status;

    private LocalDateTime createTime;}

2)保证金悲观锁扣减事务

java

运行

@Transactional(rollbackFor = Exception.class)public void deductUserMargin(Long userId, BigDecimal feeJpy) {

    // 行锁锁定余额

    Margin margin = marginMapper.selectByIdLock(userId);

    if(margin.getBalanceJpy().compareTo(feeJpy) < 0){

        throw new RuntimeException("保证金余额不足");

    }

    margin.setBalanceJpy(margin.subtract(feeJpy));

    marginMapper.updateById(margin);

    // 写入流水

    MarginLog log = new MarginLog();

    log.setUserId(userId);

    log.setChangeJpy(feeJpy.negate());

    log.setBizType(2);

    logMapper.insert(log);}

3)只读节点查询注解

java

运行

@DS("bid-read-slave")public List<MarginLog> queryUserBill(Long userId, LocalDate start, LocalDate end) {

    LambdaQueryWrapper<MarginLog> wrapper = Wrappers.lambdaQuery();

    wrapper.eq(MarginLog::getUserId, userId);

    wrapper.between(MarginLog::getCreateTime, start, end);

    return marginLogMapper.selectList(wrapper);}

四、性能数据

1. 数据库 TPS 1720 → 11600;

2. 对账查询耗时 16.2s → 1.8s;

3. 并发出价无锁等待超时。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标题:云 MySQL 读写分离 + 分表|Bidfins 雅虎代拍资金库性能优化实战
    • 摘要
    • 一、数据库瓶颈
    • 二、优化方案
    • 三、核心 Java 代码
      • 1)分表实体
      • 2)保证金悲观锁扣减事务
      • 3)只读节点查询注解
    • 四、性能数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档