对于一个开源项目,我正在文件系统之上编写一个抽象层。
该层允许我将元数据和关系附加到每个文件。
如果文件被重命名/移动或复制,我希望该层能够优雅地处理文件重命名并维护元数据。
为此,我需要一种计算文件身份的机制。显而易见的解决方案是为每个文件计算一个 SHA1 哈希,然后针对该哈希分配元数据。但是……那真的很贵,尤其是电影。
所以,我一直在考虑一种算法,虽然不是 100% 正确,但在绝大多数情况下都是正确的,而且很便宜。
一种这样的算法可能是使用文件大小和该文件的字节样本来计算散列。
我应该为样本选择哪些字节?如何保持计算便宜且相当准确?我知道这里需要权衡,但性能至关重要。并且用户将能够处理系统出错的情况。
我需要这个算法来处理非常大的文件(1GB+ 和 5K 的小文件)
编辑
我需要这个算法在 NTFS 和所有 SMB 共享(基于 Linux 或 Windows)上工作,我希望它支持文件从一个位置复制到另一个位置的情况(存在 2 个物理副本被视为一个身份)。我什至可能会考虑希望它在 MP3 被重新标记的情况下工作(物理文件已更改,因此我可能对每种文件类型都有一个身份提供者)。
编辑 2
相关问题:确定文件身份的算法(优化)