结构化数据的字段级合并能减少需要人工介入的冲突范围
别名: 字段级合并 · 按栏合并 · structural merge · 少人工
概念解释
一份记录里,姓名、日期、封面、备注是不同字段。两边各改了不同字段,按整份记录打冲突会把本可并存的改动送去人工。字段级合并(field-level merge)把冲突的单位从「这一整条」收到「发生了分叉的那几个字段」。没分叉的字段自动两边都留下,人只处理真的撞上的格子。
这条是合并粒度的收益侧:结构化之后,人工介入的范围可以缩小。它不讨论最后写入胜出有多危险——那是另一种裁决。这里的裁决是「能并的字段先并」。
机制
冲突是同一地址上的两次不可交换写入。地址划得越大,两次写入落进同一地址的概率越高。把地址从文档收到字段,两次写入经常落到不同地址:一人改截止日期,一人改负责人,两个地址,两次写入可交换,合并就是并置。人被叫来的次数下降,不是因为冲突消失,是因为很多「冲突」其实是划界画错了。
结构化是前提。字段要有稳定身份(这是 due date,那是 assignee),而不是「左边那一坨字节」。身份让合并函数知道哪两格该比。没有身份的 blob 只能整包比,字段级无从谈起。合并函数对每个字段独立:相同则取、不同则标冲突。记录级的外壳(主键、版本号)仍要能表达「这条记录发生过一次部分冲突」,否则界面只能显示整条红或整条绿。
边界
字段之间有不变量(开始时间不得晚于结束时间、金额必须等于明细之和)时,两个字段各自自动并可能拼出非法记录。这时冲突单位要升到约束所在的那一组,而不是死守一格。列表型字段(标签、多位负责人)的「字段级」其实是元素级:加 A 和加 B 可并,加 A 和删 A 仍冲突。把列表当一个字符串字段会把可并的加法打成一次正文冲突。计算字段、派生值不参与合并,应在基字段合并后再算。权限字段被自动并成「两边权限的并集」可能扩大访问,这类字段往往要升格为必须人工。
怎么落地
- 给每条用户可编的记录一张字段表,合并按字段走:只把值分叉的字段标成待处理。
- 记录在存在待处理字段时仍可阅读其他已并字段,不要整条锁死。
- 对有交叉约束的字段打包成一个合并单位,并在界面上说明它们为一组。
- 验证:两人同时打开一张任务卡,一人改截止日期,一人改标题。同步后应无需任何人点「解决」,两条改动都在。再让两人改同一个截止日期:只有日期一格进入冲突,描述、标题、附件不得被卷进去。若整张卡变红,粒度还停在记录级。