IBM Domino代理开发:如何判断归档库是否存在同一文档
跨Domino数据库判断同一文档的可行方案
针对你开发归档迁移代理时遇到的问题——核心字段重复无法判断、发现UNID后半段重复的情况,结合Domino的底层机制和实际开发经验,给你详细分析和解决方案:
关于UNID重复段的可靠性
你观察到的UNID后半段重复不是偶然的,这其实和Domino文档UNID的结构有关:
Domino文档的UNID是32位十六进制字符串,分成前后各16位的两个部分:
- 前16位和文档所在数据库的副本标识绑定,当文档被复制到不同数据库时,这部分会随之改变;
- 后16位是文档创建时生成的全局唯一标识,只要是从原文档复制内容生成的新文档(而非完全新建),这部分会保留原文档的标识。
所以你看到的重复段完全可以作为判断同一文档的依据,但要注意两个小前提:
- 你的迁移代理在创建归档文档时,没有强制生成全新的UNID(从你的示例来看是符合这个情况的);
- 虽然概率极低,但为了绝对严谨,建议搭配其他校验方式避免极端情况下的重复冲突。
补充校验方案(提升准确性)
如果要进一步确保判断的可靠性,推荐结合以下一种或多种方式:
- 存储原文档完整UNID:在迁移时,给归档文档新增一个自定义字段(比如
SourceDocUNID),把源文档的完整UNID存入这个字段。之后判断时直接对比归档库的SourceDocUNID和源库文档的UNID,这是最直接可靠的方法; - 内容哈希校验:对文档的核心静态内容(排除修改时间、创建时间这类动态字段)生成哈希值(比如SHA-256),对比两个库中文档的哈希值。即使核心字段重复,只要是同一文档的复制,哈希值就会完全一致;
- 业务唯一标识:如果文档本身有业务层面的唯一标识(比如合同编号、内部文档ID),优先用这个标识判断——这是业务逻辑上最直观的方式,也能避免技术层面的偶发问题;
- 使用Domino原生归档功能:如果场景允许,直接用Domino自带的归档规则来迁移文档,这种方式下文档的UNID会完全保持一致,直接对比完整UNID即可,无需额外开发。
总结
优先推荐的方案是:如果你的迁移代理可以修改归档文档的字段,新增SourceDocUNID存储原UNID,直接对比是最稳妥的;如果无法修改字段,那么用UNID后半段结合内容哈希做双重校验,既能利用你已经发现的规律,又能保证准确性。
内容的提问来源于stack exchange,提问作者Frank Yuan
相关产品推荐
相关产品推荐

