受邀来一起重构公司的老项目
重构首先要注意几个点 – 重构后功能的可扩展性 – 业务互相依赖的复杂度 – 脱离本身的业务进行重构 – 重构后的代码可读性与可维护性 – 性能的提升 以上几点是重构注意的地方也是重构的目的
本次重构的项目运营了三年之久,用户及业务量也上不来。至于重构的真正原因不清楚。
非常的惨淡
部分字段
字段名 | 类型 | 是否为空 | 默认值 | 注释 |
---|---|---|---|---|
MemberId | bigint(20) | Y | 自增编码 | |
MemberPhone | varchar(255) | N | ” | 手机号码 |
LoginTime | int(11) | Y | NULL | 登录时间 |
QuitTime | int(11) | Y | NULL | 退出时间 |
LoginState | tinyint(2) | Y | NULL | 登录状态 |
MemberState | tinyint(2) | N | 0 | 账号状态 |
MemberExpert | tinyint(2) | N | 0 | |
MemberRegTime | int(11) | Y | NULL | 注册时间 |
DeviceToken | varchar(255) | Y | NULL | 设备标示 |
WxToken | char(32) | Y | NULL | 微信标示 |
问题点有以下几个 1. 数据字段设计时不应使用驼峰命名,应使用小写,单独分割用_ ,例如 member_tel , 索引的设置也存在一些问题 2. 字段尽量避免DEFAULT NULL 3. 根据需求分表,现在所有的第三方授权都放到一个表里了
前期重构要求速度要快。所以只能选择世界上最好的语言。
考虑到数据量也不小,手动操作是不可能了,选择使用RabbitMQ进行数据迁移
CREATE TABLE `member` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`tel` bigint(20) DEFAULT NULL COMMENT '手机号码',
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录密码',
`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '账号状态 0:正常',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `member_tel_unique` (`tel`),
KEY `member_tel_status_index` (`tel`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=80073 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `member_authorized` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`member_id` bigint(20) NOT NULL COMMENT '用户编码',
`prefix` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '第三方名称',
`token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '第三方标示',
`data` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权获得的用户信息',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `member_authorized_prefix_index` (`prefix`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `member_data` (
`member_id` bigint(20) NOT NULL COMMENT '用户编码',
`sex` enum('0','1','2') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '性别 0=>女生 1=>男生 2=>未知',
`nick_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名/昵称',
`img` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户头像',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
UNIQUE KEY `member_data_member_id_unique` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
通过队列,可以选择laravel内置的队列或者rabbitmq都可以。将数据迁移到新表中。当然你需要选择一个访问量最低的时间段。并不是凌晨就少,不同的行业的活跃时间段不一样。建议先使用百度统计、腾讯分析等等的查看活跃时间区间。
重构并不是一言一语,几行代码或者一个大佬的方案就可以解决的。实际重构也是一个开发的过程。在不断的迭代中,将重构完成的部分补回到业务中。
感谢你看到这里,希望本篇文章可以帮到你。有问题可在评论区留言。
最后修改:2个月前 2018-07-05
© 著作权归作者所有