结论先说:如果旧字段本身还能承载新语义,优先做“加法”扩展,即新增字段并保留旧链接与旧参数;如果旧字段的语义已经被新业务改变,才考虑做“替换”扩展,并接受一段时间的双写与兼容。判断依据不是字段数量够不够,而是旧字段是否还能被新数据正确解释。
上线后最常见的信号不是报错,而是同一批链接开始出现两种写法:有的带旧参数,有的带新参数,后台都能存进去,但导出后字段含义对不上。此时有两种合理解释。
这两种解释对应完全不同的扩展动作。前者需要改存储结构,后者需要先统一命名和映射关系。
可以取一批已经产生问题的链接,逐条检查参数名、参数值和后台字段的对应关系。假设一个短例子:旧链接写作 <a href="/item?id=1024&type=book">查看</a>,新业务要求同时记录“语言”和“版本”。如果只在 type 后面拼成 book-zh-v2,后台仍写入同一个字段,那么问题属于解释二,即语义漂移。如果新增 lang=zh&ver=2 后旧字段长度或类型无法保存,才属于解释一。
能区分两者的关键证据有三个:旧链接是否仍能独立解析出完整业务含义;新参数是否必须与旧参数同时出现才能工作;导出数据时是否需要人工拆分字段。只要出现“必须人工拆分”,就说明字段边界已经不适合当前业务。
当旧字段仍能正确解释旧数据时,采用加法扩展。具体动作是:在数据层新增独立字段,在页面输出层让新链接携带新参数,旧链接继续可用。这样做的结果是,旧页面不需要批量改写,新页面可以逐步迁移。下一步应观察新旧链接是否都能写入对应字段,而不是急着删除旧参数。
适用条件是旧字段的语义没有被改变。例如旧字段表示“内容类型”,新需求只是增加“语言”,那么新增语言字段即可。若旧字段本身表示“内容类型”,却被迫承担“活动来源”,就不适合继续加法。
当旧字段语义已经被新业务覆盖时,继续加法只会让字段越来越多、含义越来越模糊。此时应新建字段,并让新链接只写新字段;旧链接在过渡期内由服务端映射到新字段。实际动作可以是在输出链接时统一生成新参数,同时在接收端保留旧参数的解析分支。结果如何影响下一步:如果旧参数解析分支的调用量持续下降,可以安排下线;如果仍有大量旧链接进入,就不能直接删除映射。
这里要注意,请求量或抓取量下降不能单独证明替换正确,因为缓存、入口调整或统计口径变化都可能造成同样现象。需要同时核对业务数据是否完整写入新字段。
这三件事的顺序会影响后续维护成本:先固定命名,再决定是否双写,最后才清理旧参数。反过来做,容易在清理后发现旧链接无法映射,只能回滚。整个扩展过程的目标不是让字段数量变多,而是让每条链接代码都能被唯一、稳定地解释。