1:项目布景

本文正在参与「金石计划」”,在新的项目中,有一个上传数据的功用,数据都是Excel格式的,前期的业务比较少,所以单表存储这些数据并没有什么压力,后面发现有些Excel都是几万,几万的数据,导致二个多月今后,数据现已到达了500多万了,项目才上线半年不到,主要这些数据仍是供给了查询功用,假如持续运用单表,那么总有一天会由于数据量太大导致查询效率低下,所以这时分想到了分表处理。

2:单表到多表的演变

通过评定,咱们终究决定运用Sharding-jdbc来完成分表。可是这时分就遇到一个问题,如何将老数据搬迁到新的表中。一般来说会有二种计划

停服处理

也便是将告知客户,体系正在升级,让客户过段时间再拜访,然后咱们在进行数据的搬迁,这种计划会简略很多,缺点便是体系有一段时间无法运用

不停服处理

在数据搬迁过程中,用户是无感知的,咱们在进行数据搬迁的过程中,体系能够正常拜访,缺点便是计划更加复杂

通过参议,咱们终究选用停服处理

3:搬迁计划

全体的完成流程如下

生产中如何将单表数据迁移到分库分表中

4:搬迁过程中需求考虑的问题

1:数据是一次性导入仍是批量

咱们的数据是一次性将悉数数据搬迁仍是分批次搬迁。我建议是运用分批次搬迁,一次性搬迁数据量太大,或许内存不足。

2:某个批次导入失利,怎样知道是哪个批次的数据导入失利了

已然咱们是运用分批次导入,那么其中有一个批次的数据导入失利了怎样办,咱们又是怎样知道那个批次导入失利了。所以这时分咱们会有一张搬迁记录表,改表记录了搬迁的批次,数据的规模,同步状况等一些信息,后续能够查看这张表,假如有某个批次数据搬迁失利,只需再次同步这一次批次的数据即可,这也是为什么咱们要运用分批次导入数据的原因,假如你是一次性搬迁悉数数据,那么假如半途失利了,那么又要从头搬迁,浪费资源又浪费时间

3:批量屡次导入,假如半途某一个批次导入失利,怎样办

假如某个批次导入失利了,那么咱们就从头导入就行了。

4:导入失利之后从头导入,有重复数据怎样办

某个批次导入失利,咱们就会从头导入,这个时分新表中或许现已存在这条数据了,所以咱们要做好数据校验,现已有的数据就不需求再次导入了

5:怎样校验数据悉数导进去了

这个也是最重要的,咱们要查验数据的准确性,是否有多导入的数据,或许少导入了数据

6:验证线上分库分表逻辑

这个便是在将数据从单表搬迁到多表之后,咱们要验证线上服务是否正常,数据是否正常

5:总结

停服处理相对来说仍是会简略些,之所以选用这种计划也是由于简略,只需求在数据搬迁完成之后验证数据准确就能够了