如果散列受 CPU 限制,如何检查大文件身份?

poi*_*ige 9 multi-core hash big-data

对于小文件散列就可以了,但是对于大文件,您可以轻松找到md5sumCPU 限制。是否有任何散列算法能够在多核上横向扩展?任何解决方法?想法?任何事物?:)

poi*_*ige 14

我自己目前最好的解决方案是:

parallel --block=512M --pipepart -a …HUGEFILE… --progress --recend '' \ -k -j …NUMofProcessesSay4… md5sum | md5sum

- 应该注意的是:

  1. 生成的 md5 哈希不是文件的,而是其部分的 md5,但它仍然允许您比较副本是否与原点相同
  2. 它的性能也不是很好,特别是当您使用pipe而不是文件作为输入时
  3. parallel--pipepart,因为我发现不支持磁盘分区

所以我也很想听听其他方式。

  • GNU Parallel 的 Git 版本现在支持块设备(至少在 GNU/Linux 上)。谢谢你的想法。 (3认同)

sho*_*hok 5

不幸的是,MD5 是一个线性过程,其状态取决于所有先前的输入。换句话说,你不能真正并行化它。此外,我不知道任何不以这种方式运行的真实哈希算法。

您可以做的(并且,根据您的回答,您正在做的)是拆分源文件并同时计算每个块的 md5sum。

如果您不能/不想这样做,则必须使用更快的哈希函数作为xxHashCityHashSpookyHash

其他想法(也许它适用于您的意图使用):如果您需要比 MD5 更快的东西(尽管是单线程),您可以使用 CRC32(由最近的 CPU 硬件加速)进行第一次快速通过,诉诸 MD5 /SHA1 用于对看似相同的文件进行第二次传递。