仓库合并
元数据仓库可能存在多个 Album root
,用户也可能会选取多个元数据仓库作为数据来源。因此无论是在整理侧还是用户侧,对多个元数据仓库实现合并都是必要的。
专辑合并
专辑的第一去重标准是品番。当不存在品番冲突时,两个元数据仓库可以无缝合并。而当存在品番冲突时,则需要进行合并操作。下文规范了这种合并操作的具体流程。
专辑相似度
两张品番相同,且相似度极大的专辑很有可能就是同一张。对专辑相似度的判定基于以下基准:
- 专辑品番一致
- 专辑发售日期一致
- 专辑中碟片数量相同
- 专辑中每张碟片中的音轨数量相同
一般而言,上述四条完全相同就可以判定两张专辑为同一专辑。各实现可以在此基础上定义更多的规则。
合并内容
对两张重复的专辑,需要合并的内容如下:
- 专辑、碟片、音轨的
Tag
- 音轨的
artists
字段
专辑 Tag 合并
Tag
合并时,取 Tag
的并集。
artist
合并
artist
合并时,需要对其下所有字段进行合并。当存在冲突时,实现可以选择任意一边的值。
Tag 合并
不同的仓库可能会使用各自不同的 Tag,因此仓库合并时也需要对 Tag 进行合并。
合并时,按照 Tag 的名称进行合并,将两棵 Tag 树合并为一张有向 Tag 图。 合并完成后,该有向图中不能出现环路,当出现环时合并失败,需要人工介入。