研发数据迁移中保留链接关系,关键是把“链接”拆成三类可迁移信息:两端对象的稳定标识、链接类型与方向、链接附带的属性(创建人、时间、说明),分别映射、分别核验。迁移前先盘点源系统的链接类型与数量,建立对象ID映射表,再按“先对象、后链接、再属性”的顺序导入,最后用计数比对、抽样核对和断链清单确认结果。本文覆盖从范围界定到回退条件的完整阶段,工作流与插件行为的迁移、切换后的整体验收不在讨论范围内。
要点总览(TL;DR)
- 链接保留要把链接拆成两端对象标识、链接类型与方向、链接属性三层分别迁移,范围清单按对象类型和链接类型逐项确认。
- 迁移前先导出链接清单并按类型统计基准数,建立对象ID映射表,用稳定标识而非可能变化的编号作为源对象ID。
- 字段映射以语义为准:源系统一种链接类型可能拆成目标系统多种,也可能归并为一种,无法映射的链接进入待处理清单并保留原类型。
- 导入按先对象、后链接、再属性的顺序分批执行,每批带批次标识,失败记录隔离重试,导入日志按批次留存。
- 核验以分类计数比对、分层抽样核对和断链清单三层完成,暂停与回退阈值需在迁移前书面约定。
迁移范围:哪些链接需要保留
“链接保留”首先要回答保留什么。研发数据中的链接通常连接需求、任务、缺陷、文档、用例等对象,迁移时需要保留的是链接本身承载的关系信息,而非对象内容。范围清单建议按对象类型和链接类型两个维度展开,逐项标注是否迁移。
链接关系可以拆成三个层次来盘点:
- 两端对象类型:需求—任务、任务—缺陷、需求—用例、工作项—文档等组合。每种组合单独列出,因为不同组合在源系统中的存储方式和导出字段可能不同。
- 链接类型与方向:关联、阻塞、父子、引用等。方向必须记录,例如“A 阻塞 B”与“B 阻塞 A”是两条不同的关系,父子关系还涉及层级顺序。
- 链接属性:创建人、创建时间、链接说明。这些属性影响迁移后的可追溯性,是否保留应在范围清单中明确,而不是默认丢弃。
范围清单建议采用下表结构,逐行填写并标注迁移决策:
| 源对象类型 | 目标对象类型 | 链接类型 | 方向 | 属性是否迁移 | 决策 |
|---|---|---|---|---|---|
| 需求 | 需求 | 父子 | 父→子 | 创建人、时间 | 迁移 |
| 任务 | 缺陷 | 关联 | 双向 | 说明 | 迁移 |
| 工作项 | 文档 | 引用 | 单向 | 创建人 | 迁移 |
| 用例 | 需求 | 覆盖 | 单向 | — | 待确认 |
范围清单需要与业务方共同确认,尤其是“待确认”项。确认后的清单是后续映射表和核验计数的基准,范围之外的关系不进入本次迁移,也不在核验中作为缺失项统计。
迁移前输入:对象ID映射表与链接清单
链接迁移依赖两份输入物:对象ID映射表和链接清单。映射表解决“源对象对应目标哪个对象”,链接清单解决“哪些对象之间存在什么关系”。两份输入物都应在对象迁移开始前设计好字段,在对象迁移完成后回填。
对象ID映射表的建立分两步。第一步从源系统导出对象,选取稳定标识作为源对象ID。稳定标识应满足迁移期间不变、全局唯一两个条件,源系统的自增编号在数据整理过程中可能变化,通常不如业务编号或系统内不可变的唯一键可靠。第二步在目标系统创建对象后,将目标对象ID回填到映射表同一行。回填方式可以是导出目标对象清单后按业务键匹配,也可以由导入工具在创建时返回ID。
映射表建议包含以下列:
| 列名 | 是否必填 | 说明 |
|---|---|---|
| 源对象ID | 必填 | 源系统稳定标识 |
| 对象类型 | 必填 | 需求、任务、缺陷、文档等 |
| 对象标题 | 必填 | 便于人工核对 |
| 目标对象ID | 必填 | 目标系统创建后回填 |
| 映射状态 | 必填 | 已映射、待映射、映射失败 |
| 校验结果 | 校验列 | 标题或关键字段比对是否一致 |
链接清单从源系统导出,每行代表一条链接,字段包括源对象ID、目标对象ID、链接类型、方向、属性字段(创建人、创建时间、说明)。导出后先做一次计数:按链接类型分组统计条数,作为后续核验的基准数。链接清单中的对象ID在导入前需通过映射表替换为目标对象ID,替换失败的记录直接进入待处理清单。
字段映射方法:同名字段含义不同怎么处理
链接相关字段的映射以语义为准,字段名相同不代表含义相同。例如源系统的“关联”可能同时涵盖阻塞和参考两种关系,目标系统的“关联”只表示参考关系,此时需要把源字段拆分为两条映射规则,而不是按字段名整体对应。
常见冲突及处理规则如下:
| 冲突情形 | 处理规则 | 示例 |
|---|---|---|
| 源链接类型一对多 | 按目标类型拆分,逐条生成映射 | 源“关联”拆为目标“关联”与“阻塞” |
| 源链接类型多对一 | 归并到目标单一类型,保留源类型到说明字段 | 源“依赖”“前置”归并为“阻塞” |
| 方向字段命名不同 | 按角色语义对应,不按字段位置对应 | 源“from/to”对应目标“源对象/目标对象” |
| 目标无对应类型 | 标记待处理,写入说明字段保留原类型 | 源“覆盖”在目标无对应,进入待处理清单 |
方向与角色字段的对应需要单独验证。部分系统用“源/目标”表达方向,部分系统用“发起方/接收方”,字段名不同但语义可能一致;也有系统对双向链接只存一条记录,迁移到单向存储的系统时需要生成两条。映射规则表应逐条写明源字段、目标字段、转换规则和验证方式,无法映射的链接统一使用占位标记并进入待处理清单,保留原始类型和两端对象信息,便于后续人工处理。
在对象与链接的管理动作上,ONES 的工作项关联与文档能力可以承载迁移后的链接关系:Jira 迁移方案覆盖项目、工作项、状态、字段、流程、附件和历史记录,Confluence 迁移可将空间、页面、附件和权限结构迁入 ONES Wiki。工作项之间的关联链接是否在迁移工具范围内、页面互链迁移后的指向如何处理,现有资料未明确说明,实施前应向原厂确认,并在试迁移批次中重点核验。
执行顺序与导入步骤
导入顺序遵循“先对象、后链接、再属性”的原则。对象先落地并回填目标ID,链接才有可指向的目标;链接属性最后补充,可以在链接主体导入成功后单独处理,避免属性字段异常导致整条链接导入失败。
分阶段执行步骤如下:
- 对象导入:按对象类型分批导入,每批带批次标识。导入完成后导出目标对象清单,回填映射表的目标对象ID,校验映射状态。
- 链接主体导入:用映射表替换链接清单中的对象ID,按链接类型分批导入。每批导入前确认该批次涉及的对象已全部映射成功。
- 链接属性补充:导入创建人、创建时间、说明等属性。创建人需要先完成用户账号映射,时间字段注意时区口径一致。
- 失败处理:导入失败的记录按批次隔离,记录失败原因后重试;同一记录连续失败两次的转入待处理清单,不阻塞后续批次。
导入日志建议记录:批次标识、导入时间、链接类型、计划条数、成功条数、失败条数、失败原因分类、操作人。日志按批次留存,既是失败重试的依据,也是后续核验和回退的凭证。
核验与证据:如何证明链接没丢
核验分三层进行,每层产出可复核的记录。第一层是计数比对:以迁移前按链接类型统计的基准数为准,与目标系统导入后的分类计数逐项比对,差异数为零或差异记录全部有解释。第二层是抽样人工核对:按链接类型分层抽样,打开目标系统中的两端对象,确认链接类型、方向和属性与源系统一致。第三层是断链清单核对:所有映射失败、导入失败、待处理的链接汇总成断链清单,逐条标注原因和处理状态。
核验记录表建议包含以下字段:
| 字段 | 用途 |
|---|---|
| 链接类型 | 分类统计口径 |
| 源系统条数 | 迁移前基准数 |
| 目标系统条数 | 导入后实际数 |
| 差异数及原因 | 解释计数差异 |
| 抽样条数与核对结果 | 人工核对证据 |
| 断链条数与处理状态 | 兜底证据 |
| 核验人、核验时间 | 责任留痕 |
断链清单与待处理清单分开维护:断链指本应迁移但导入失败的链接,待处理指映射规则未覆盖、需要业务确认的链接。两类清单都应有责任人和预计处理时间,核验结论以“差异已解释、断链已处理或已确认接受”为完成标志。
回退与停止条件
暂停与回退的阈值应在迁移开始前书面约定,避免执行中临时判断。常用阈值包括:单批次断链率超过约定比例、映射失败率超过约定比例、抽样核对发现链接指向错误对象。任一条件触发时,暂停当前批次,先修正映射规则或对象映射,再决定是否重试。
对象映射错误导致链接指向错误对象时,处置重点是隔离而非修补:暂停该批次后续导入,定位错误映射影响的对象范围,修正映射表后重新导入受影响链接。已经指向错误对象的链接需要先清理再重建,清理范围以映射表校验结果为准。
回退到上一批次的操作包括:撤销当前批次已导入的链接、恢复映射表中被修改的行、保留导入日志和失败记录。恢复迁移前需确认三项:映射规则已修正并经过小批量验证、受影响对象的目标ID已重新核对、上一批次核验结论仍然有效。确认完成后从暂停的批次重新开始,批次标识顺延,不复用旧批次号。
常见问题
源系统里同一条链接在导出时出现重复记录,迁移时应该合并还是逐条导入?
先判断重复的来源。如果源系统对双向链接只存一条记录、导出时按两个方向各展开一次,这属于同一关系的两种视角,迁移到单向存储的目标系统时应合并为一条,并保留方向字段。如果重复记录来自数据整理过程中的多次导出叠加,应以稳定标识去重后再统计基准数,否则核验时目标系统条数会少于源系统,差异无法解释。
处理原则是:合并前确认两条记录的两端对象、链接类型和属性完全一致;属性不一致的重复记录不合并,转入待处理清单由业务方确认保留哪一条。
链接属性中的创建人迁移时找不到对应用户账号,怎么处理?
创建人属于链接属性,建议放在链接主体导入成功之后单独补充,避免因账号映射问题导致整条链接导入失败。找不到对应用户账号时,可先以迁移专用账号或系统账号占位,同时在链接说明字段保留源系统创建人名称,并记入待处理清单。
账号映射应在对象迁移阶段就完成,链接属性补充阶段直接引用映射结果。离职人员、外部协作账号这类无法映射的情况,需要业务方确认是保留占位还是清空,处理结论写入核验记录,避免后续被当作数据丢失。
分批导入时,后一批次的对象引用了前一批次尚未映射成功的对象,应该怎么排批次?
批次划分不能只按对象数量切分,还要看对象之间的引用关系。建议先做一次依赖分析:如果某批链接的两端对象分属不同批次,应把被引用对象的批次排在前面,等其映射状态全部为“已映射”后再导入链接。
存在循环引用时,可先导入对象主体、暂不导入链接,待所有相关批次对象落地并回填目标ID后,再统一导入链接。批次标识要贯穿对象导入、链接导入和日志记录,回退时按批次定位影响范围。
抽样核对发现链接方向反了,是逐条修正还是整批重导?
先定位范围。如果方向错误集中在某一链接类型或某一批次,说明映射规则中方向字段的对应关系写错了,应暂停该批次后续导入,修正映射规则后整批重导,逐条修正容易遗漏且无法保证一致性。如果只是个别记录因源数据本身方向标注异常导致,可单独修正并记入断链清单。
重导前需清理已导入的错误链接,清理范围以映射表校验结果为准。修正后的映射规则先在小批量样本上验证方向正确,再恢复整批导入。
迁移完成后源系统还要保留一段时间,两边数据同时有人修改,链接核验以哪个时点为准?
核验需要一个明确的截止时点。建议在正式迁移批次开始前对源系统做一次链接清单快照,以快照作为基准数,并在切换窗口内限制源系统的链接变更,或记录变更清单。
如果源系统在迁移期间仍有新增链接,应把这些变更单独列为增量批次,与全量批次的核验分开统计,避免基准数被污染。核验记录中写明快照时间、增量范围和核验时点,结论才可复核。
