简介
在上一篇文章(SQLServer分表项目方案总结)中介绍了分表大致流程和步骤,本篇文章以一个模拟的数据表为例,为您介绍从分表前到分表结束整个过程的大致处理逻辑。
源表数据情况
分表步骤
一季度分表
举例按季度进行分表,1-3月份分作一个新数据表
这里分两种情况:
- 一种是业务的历史数据分表:在大部分场景下历史数据非常多,select into效率会更高,但是要注意的是select into建立的表没有主键、索引、默认值。需要另外执行SQL脚本进行添加。
- 另一种是日常的业务数据执行计划:日常的执行计划,采用insert into做数据迁移。
业务数据迁移完后,将迁移记录写入“索引表”。
二季度分表
第二季度与上一季度一样,4-6月份分作一个新数据表。
其他季度分表
以此类推,灰色部分代表源表中,已经确定需要分离的数据。
注意:笔者这里,最后一个季度(本季度)业务数据不进行拆分
数据校验归整
此次开始校验数据总量,迁移后的各分表数据量总和如果与源表本季度需要被迁移的数据量一致,则进行如下3个操作
- 写入分表记录表,若某季度分表失败,则以报表的形式发出预警;
- 索引表标记该季度数据分表是否成功,查找数据时,通过此字段标记是查找分表中的数据还是查找源表中的数据;
- 清除源表中已分表成功的业务数据。
分表后的结果
拆分之后的所有“数据表”情况
拆分之后“索引表”及“分表记录表”情况