【项目复盘】SKU表拆分重构项目复盘

背景

跨境电商行业由于业务发展,需要拆分一个存在多个平台数据SKU大表.为在销售旺季来临之前能上线使用,暂定先拆分几个数据量比较大的平台Ladaza和Ebay.

目的

1、减少SKU表数据量,原表数据量近四亿,按照平台迁移后数据量将减少60%。
2、重构ebaySku、lazadaSku表结构,Sku原表字段210个,lazada主表:40个,子表:42个;ebay主表:57 个,子表:30个。
3、提升SKU业务表性能,查询业务主表,其他非查询信息存入子表。
4、代码修改及迁移,将业务代码按平台迁移到对应的class或controller。
5、为即将到来的销售旺季做好IT软件保障

项目过程管理

项目目标:
1、组织项目启动会议,明确项目目标和范围
2、每周组织项目会议强调项目关键节点

项目进度:
1、每周组织项目会议汇总当前进度情况
2、通过在线文档每天查看进度情况
3、适时询问项目参与者进度

项目风险:
1、每周会议沟通遇到的问题并解决,当场无法解决的给出明确的解决时间及责任人
2、成立工作沟通QQ临时讨论组,方便沟通
3、对于单独反馈或讨论组反馈问题及时响应,并给出处理结果,在周会上进行总结。
4、对同类型问题告知所有项目组参与成员,让参与者信息一致

资源协调:
1、跨业务组资源协调(如修改代码后需要各个业务组功能验收,产品经理验收)
2、在修改代码时部分业务代码修改需要和业务开发部门确认
3、对部分目前没有优化的点向各组产品经理反馈
4、协调架构、高级开发、运维、DBA准备上线的事宜等

项目过程中遇到的问题

1、主键id的数据类型问题

问题描述:
sku拆表后,因sku原表的主键ID的数据类型是NUMBER(9,0),拆分后lazada、ebay sku表 主键id的数据类型为varchar2(36),导致有部分与sku原表有关的业务存储id类型有问题,之前的id类型是number(9,0),改为string后数据无法存储。

影响:
数据无法保存。

处理方式:
对引用了sku表id的数据表业务进行确认,并与业务开发组确认。针对这些业务不再引用sku表id,采用skuID进行维护引用关系。

2、查询SKU表原表没有平台信息

问题描述:
主要针对的是非销售相关的业务,因为在查询sku表没有提供平台信息,也没有账号信息。

影响:
无法明确查询的数据属于哪个平台,就无法确认数据存储在哪个sku表中

处理方式:
1、代码修改为先查sku原表,若查不到则查lazada_sku,最后再查ebay_sku。
2、业务组对使用到sku表进行业务上的重构,增加平台作为必选参数,若可以增加销售账号则更加(lazada、ebay采用账号分区)

3、LazadaSku,EbaySku平台分区字段编辑

问题描述:
对lazada、ebay SKU表分区字段seller_account ,OA的业务操作中有对seller_account字段进行编辑操作。

影响:
OA功能无法支持,因为分区字段不支持编辑。

处理方式:
1、编辑界面上删除seller_account信息录入。
2、编辑业务代码中不再支持seller_account编辑

4、废弃、不规范代码问题

问题描述:
在现有的解决方案中,存在有太多的废弃不用的代码或者声明一个dbservice,但在方法体中没有使用。

影响:
在修改代码需要花费大量的时间来确认方法或业务是否还需要使用。此种情况也在页面和controller中很常见。

处理方式:
明确不用的代码删除,只声明不引用的变量删除。

5、源代码合并

问题描述:
在开发期初时,超过一周时间未对主干代码进行合并,在第一次合并代码时,代码冲突项太多了。

影响:
代码冲突项太多,增加了合并代码负责度,同时也容易在合并时出现错误遗漏

处理方式:
改变代码合并的频率,由一周一次改为2天一次。

6、表字段重构

问题描述: 在提交建表脚本时,表没有按照规范进行重构。直至项目进入到功能测试末期才对表字段按规范重构。

影响:
1、表还不够精简,性能以后会受限。
2、造成项目延期
3、验收不能充分验收

处理方式:
1、紧急组织会议,在最短时间内拿出重构表的结构。
2、紧急处理sql脚本评审,并最快最优处理。
3、sql脚本通过审核后测试环境创建表结构。
4、组织会议明确表结构重构代码修改及受影响的功能
5、安排加班进行代码修改,加快进度。
6、安排测试针对lazada、ebay 业务再次验收

7、代码修改的规定不够明确

问题描述:
在修改代码过程中存在共性问题,因处理的人不同修改方式不同。

影响:
代码整体美感,无法达到架构要求的那样,千人写的代码如一人。

处理方式:
1、尽可能针对共性问题整理一个修改指引
2、发现共性问题并解决后通知所有人。

8、bus service、long bus service

问题描述:
更新包打包后,bus service 和long bus service 更新到服务器后,服务无法启动。

影响:
bus 服务无法启动(启动超时),导致所有使用到bus的业务都将中断。

处理方式:
1、排查bus服务启动缓慢的原因。
2、ProductSkuModelMappingProfile 文件创建automap时使用.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.ID)).ReverseMap(),导致automap映射组件加载缓慢,改为ForMember的最后再进行ReverseMap。

9、Ebay加入刊登异常(大数据量才发现的问题)

问题描述:
小数据量(小于500)加入刊登正常,大数据量(大于500)加入刊登异常,EF 异常(一个实体对象不能由多个IEntityChangeTracker实例引用)。

影响:
当ebay加入刊登数据量大于500时无法加入刊登。在处理子表数据写入时后,未对子表sku集合进行数据清理操作。导致下次分页处理数据执行时重复数据写入。

处理方式:
1、将需要分页清理的集合声明放到循环体内进行声明,避免业务代码遗漏没有清理集合中的数据。
2、问题排查方向:

  • 检查重复添加。
  • 可能存在list添加后没有清空集合。

10、Ebay平台SKU调价列表页面异常

问题描述:
ebay平台sku调价列表选择多个sku设置固定价格、固定利率时页面加载异常。

影响:
ebay平台批量设置sku固定价格、固定利润率、非固定页面无法加载,功能不可用。

处理方式:
1、页面视图viewmodel验证ItemViewModel增加判断为null。
2、初始化EBaySkuViewModel同时需要初始化EBaySkuItemViewModel

11、代码合并到主干

问题描述:
分支引用了本地解决方法DLL目录下的Oracle.ManagedDataAccess.Client的dll,packages包安装18.3版本包文件。

影响: 其他开发同事更新代码后导致本地编译无法通过。

处理方式:
1、修改引用了解决方案DLL目录的dll为从nuget包获取。
2、删除packages的Oracle.ManagedDataAccess.Client 18.3安装包。

猜你喜欢

转载自blog.csdn.net/CountryShi/article/details/109045749