美文网首页
分库分表方案

分库分表方案

作者: 悟空嘿 | 来源:发表于2021-08-26 11:34 被阅读0次

-分表方案
-数据迁移

1.分表计算。
根据数据量现有量和递增量评估。表中字段不太多,字段长度适中的表,默认页大小为16kb情况下,数据量维持在2000万以下就可以(保持B+树的高度不超过3)。
比如:t_client_records 用户订单表,现有数据量为4000万,业务增速为20%,每年增长4000万*1.2,5年以后,总量为3个亿左右的数据。3亿/2000万,为15张表。按照2的 倍数来,就是16张表。
表名:t_client_course;
分表:t_client_course_0,t_client_course_1....t_client_course_15;
分表字段: client_id 客户号,算法: 1.计算公式: client_id&(16-1)。2.启用表对列: aliveList:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}。

伪代码:
public int queryIdx(){
int len=16;
int idx=-1;
while(len>0){
    int idxTemp = client_id & (len-1)
    if( aliveList.contains(idxTemp) ){
      idx = idxTemp;
      break;
    }
  len = (len>>1);
}
if(idx<0){
  throw new Exception("查找异常");
}
}

如果后期扩容:
将 t_client_course 扩容两张表:t_client_course_0 --->t_client_course_0 和t_client_course_16;
修改配置 -> aliveList:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}。
原表t_client_course_0中的数据,一部分会迁移到 t_client_course_16中。

不停机迁移

1.设置系统级参数标量: is_in_migrate,是否在做数据迁移。
2.设置在对表t_client_course的写入操作,都需要对client_id 加分布式锁。
3.在迁移过程中,对客户ID 维度来迁移。

伪代码:
 // 原来的对t_client_course表的写入操作,添加 client_id 维度的分布式锁。
  lock = redisson.getLock(lockKeyPrefix + client_id); 
  lock.lock(timeout, TimeUnit.SECONDS);
// 是否迁移完成
boolean isSuccess = query();
if(isSuccess){
  //写入分表中的数据
}else{
  //写入原表逻辑
}

//分割线-------------------------------------------------------
// 数据迁移
 lock = redisson.getLock(lockKeyPrefix + client_id); 
  lock.lock(timeout, TimeUnit.SECONDS);
list records = queryByClientId(client_id);
 int idx = queryIdx(client_id);
// 写入分表 t_client_course_idx

相关文章

  • 分库分表

    【分库、分表】MySQL分库分表方案 - MrSunny - 博客园 总结下Mysql分表分库的策略及应用 - 周...

  • 订单表的分库分表方案设计(大数据)

    订单表的分库分表方案设计(大数据) 一、两种方案分库分表 一般业界,对订单数据的分库分表,笔者了解,有两类思路:按...

  • mysql优化

    Mysql分库分表方案 Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时...

  • 分库分表

    Reference 分库分表需要考虑的问题及方案

  • 面试必备:我们为什么要分库分表?

    目录 什么是分库分表 为什么需要分库分表呢 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分...

  • (转载)MySQL数据库之互联网常用分库分表方案

    MySQL数据库之互联网常用分库分表方案 一、数据库瓶颈 1、IO瓶颈 2、CPU瓶颈 二、分库分表 1、水平分库...

  • 分库分表方案

    为什么分库分表?单库单表性能时延扛不住,或者存储空间扛不住 分库和分表有区别吗?存在批量查询的情况下,分表只能徒增...

  • 分库分表方案

    -分表方案-数据迁移 1.分表计算。根据数据量现有量和递增量评估。表中字段不太多,字段长度适中的表,默认页大小为1...

  • 分库分表方案

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活...

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

网友评论

      本文标题:分库分表方案

      本文链接:https://www.haomeiwen.com/subject/rnayiltx.html