数据迁移扩展-商品数据迁移实践
一、背景描述:
双11前对原商品数据重新做了分库分表和数据迁移,称双11空闲做下复盘。
原来我们商品主数据在2个公共库,每个库有100张商品主数据表,大概有3亿左右的商品数据,根据商品编码进行分库分表路由, 随着商品种类不断增加原库表数量不能满足,因此需要扩充以支持20亿商品数据的量。方案是将商品数据迁移到8个查询库去,每个查询库500张商品表,因此需要将原来的商品数据进行迁移和打散。
二、整个过程数据迁移过程:
1、前置准备
申请表扩容的磁盘空间,每个库预计需要100G的磁盘空间,总共需要800G的磁盘空间
2、全量同步
通过大数据任务将原库表中的数据全量拉取出来打散并写到新库表中,拉取数据的创建时间点指定小于某个时间点A, 例如拉取发布前7天之前的商品数据并打散到新的8个查询库4000张表中
3、代码修改
写库的时候增加一个配置开关,开关值为0的时候只写原库表,1的时候原库表和新库表都写,2的时候只写新的库表;即0写公共库,1写公共库+查询库,2写查询库
查询的时候也增加一个开关,开关未0的时候只查原库表,开关未1的时候只查新的库表;即0查公共库,1查查询库。
4、数据双写
新代码发布完后,打开写库的开关到1进行双写。即一份商品数据既写到公共库也写到查询库;我们的商品数据是商品中心通过kafka下发的,我们收到后会将需要的商品属性信息写到自己的商品主数据表中,像商品通子码、品牌目录编码等信息。
5、增量同步
双写开关打开后,追加增量数据,从时间点A到双写开关打开那个时间点的数据,将原库表中这个时间段的数据通过大数据任务追加到新库表; 如果追加过程中发现重复数据则新的不写入。
6、验证
增量初始化完后,原库表和新库表中的数据就完全一致了,打开查询的开关到1,验证查询新库表功能正常。即打开查询开关查查询库商品数据验证功能。
7、稳定运行
稳定运行一段时间
8、关闭双写
关闭双写,写库开关调整为2只往新的库表写数据,运行一段时间;即只写查询库。
9、清除老表数据
双写关闭后运行稳定,就可以清除老库表数据了,先改表名而非直接删表,一段时间后无问题再删表;即清除公共库商品数据,释放磁盘空间资源。