仓库合并

元数据仓库可能存在多个 Album root,用户也可能会选取多个元数据仓库作为数据来源。因此无论是在整理侧还是用户侧,对多个元数据仓库实现合并都是必要的。

专辑合并

专辑的第一去重标准是品番。当不存在品番冲突时,两个元数据仓库可以无缝合并。而当存在品番冲突时,则需要进行合并操作。下文规范了这种合并操作的具体流程。

专辑相似度

两张品番相同,且相似度极大的专辑很有可能就是同一张。对专辑相似度的判定基于以下基准:

  1. 专辑品番一致
  2. 专辑发售日期一致
  3. 专辑中碟片数量相同
  4. 专辑中每张碟片中的音轨数量相同

一般而言,上述四条完全相同就可以判定两张专辑为同一专辑。各实现可以在此基础上定义更多的规则。

合并内容

对两张重复的专辑,需要合并的内容如下:

  1. 专辑、碟片、音轨的 Tag
  2. 音轨的 artists 字段

专辑 Tag 合并

Tag 合并时,取 Tag 的并集。

artist 合并

artist 合并时,需要对其下所有字段进行合并。当存在冲突时,实现可以选择任意一边的值。

Tag 合并

不同的仓库可能会使用各自不同的 Tag,因此仓库合并时也需要对 Tag 进行合并。

合并时,按照 Tag 的名称进行合并,将两棵 Tag 树合并为一张有向 Tag 图。 合并完成后,该有向图中不能出现环路,当出现环时合并失败,需要人工介入。