先判断字段属于哪一类:还在被业务读取、只被历史页面引用、还是已经没有任何入口调用。三类字段的处理方式不同,保留、改写或退出应当在迁移前逐项定案,而不是等导入报错后再逐个救火。
旧系统的字段名往往带有历史痕迹,靠名字判断价值容易误判。更可靠的做法是从实际调用出发,把每个字段归入三种状态之一。
盘点的动作是:对每个字段记录“谁在写、谁在读、多久读一次、读不到会怎样”。这个记录直接决定下一步——活跃读取的字段必须在新结构里有落点,仅历史引用的字段可以降级存放,无入口调用的字段才进入退出候选。如果跳过这一步,后面所有取舍都只能凭印象争论。
三种处理不是按重要性排序,而是按前提成立与否来选。
当字段仍被业务写入,且新结构有对应的数据类型和长度,保留是最省事的。但要注意旧字段可能承担了多重含义,例如一个“备注”字段同时存了客户偏好和内部标记。这时保留字段名不等于保留语义,需要确认新系统不会把两类内容混在一起。
当旧字段的取值需要拆成多个新字段,或多个旧字段要合并成一个,改写才成立。改写的代价是迁移脚本和过渡期的双写逻辑。一个假设例子:旧系统用单个“状态”字段同时表示付款进度和发货进度,新系统要求分开。此时可以保留旧字段作为过渡,新增两个字段,在过渡期内由脚本同时写入,确认新字段数据稳定后再停用旧字段。这个动作的结果是:过渡期结束时,旧字段的读取路径应当已经归零,否则不能停用。
退出不等于删除。更稳妥的做法是把字段值导出到独立归档表或文件,保留可查询能力,再从主结构移除。退出的前提是盘点结果明确显示无活跃读取,而不是“看起来没人用”。如果盘点证据不足,退出应当推迟。
请求量或读取次数归零,不能单独证明字段可以退出。归零还有几种合理解释:统计只覆盖了部分入口、字段读取发生在定时任务里、旧页面的访问量本来就低、或者统计本身在某个时间点之后失效。要区分这些原因,可以对照以下证据。
这几项证据指向一致时,退出的判断才比较可靠。如果只有一项支持退出,其余存疑,更合适的做法是先把字段标记为待观察,而不是直接移除。
字段的取舍不是一次性会议能定完的,它和迁移顺序相互影响。建议先迁移活跃读取字段并验证读写正常,再处理仅历史引用的字段,最后处理退出候选。这个顺序的原因是:活跃字段迁移中暴露的结构问题,往往会改变对历史字段的判断。例如新结构在迁移活跃字段时发现需要统一编码,那么原本打算原样保留的历史字段可能也需要同步改写,否则后续查询会出现两套编码并存。
如果业务前提已经发生变化,例如某个旧字段对应的业务环节已经停止,但历史数据仍需保留可查,那么决策条件就与前提未变时不同:此时应优先保证归档可查,而不是强求在新系统中保留同名字段。反之,如果业务环节仍在运行,只是换了实现方式,那么该字段的读取路径必须在新系统中重建,不能只做归档。
每个字段的最终处理应当记录为一条明确条目:字段名、处理方式、依据、负责人、验证方式。保留项要写清在新结构中的对应位置;改写项要写清拆分或合并规则以及过渡期长度;退出项要写清归档位置和恢复方式。这份清单的作用不是留档,而是让后续验证有据可依。
验证动作可以这样安排:迁移完成后,对保留和改写字段执行一次真实业务流程,确认写入和读取都正常;对退出字段执行一次归档查询,确认历史数据仍能按需取出。任何一项验证不通过,就回到对应字段重新判断,而不是整体回滚。这样每一步的结果都会直接影响下一步的范围,避免把局部问题扩大成全面返工。