2

我有小型图像托管,我意识到有很多重复的内容。我想在未来通过使用校验和或哈希码来消除这个问题,与现有的图像哈希数据库相比,新上传的文件将被哈希,如果它已经存在则删除,并且用户将看到现有的图像链接。一站式服务

我的设置是准系统 Node.js+ jQuery File Upload +2 个目录(一个用于论坛上传,另一个用于直接网络上传)。

考虑到每个目录中可能有数千或数百万个文件的可能性,对我来说最好的(快速和可靠的)哈希和数据库设置是什么?我认为 MD5 或 SHA1 太过分了,可能会占用大量资源。我想知道是否有更简单的解决方案。

统计数据:
每天上传~1,000 张图片
~400 kb 平均图片大小
~35,000 张服务器中的图片
~30% 重复内容(使用 MD5 测试)

4

2 回答 2

0

MD5 实际上非常快,对于您的用例来说已经足够快了。一个轶事基准在单个 CPU 上大约每秒 400 兆字节(来源)。它不会成为服务器处理的瓶颈,并且是检查重复文件的可靠方法。MD5容易受到碰撞攻击,但必须精心准备;偶然碰撞在统计上是不可能的。听起来碰撞在您的应用程序中不会成为太大的问题(但请确保无论如何处理它们)。

如果你真的只想要速度而不是可靠性,你可以选择 CRC。它不打算成为真正的哈希,只是为了检测字节流中的错误。它的碰撞率相对较高,约为百万分之一。但是,它的速度非常快。它旨在在路由器上的硬件中实现。

于 2012-09-24T10:51:06.733 回答
0

下面的方法怎么样:

  • 当用户上传图片时,它会创建 MD5 和
  • 然后使用该 MD5 和作为文件名存储图像
  • 原始图像名称也存储在 FS 上,但作为指向 MD5 名称的符号链接。
  • 如果用户上传的图像是重复的,那么您可以检查 MD5 名称是否已经存在并创建符号链接。

为了将现有图像转换为该结构,我确信一个相当简单的 shell 脚本使用md5sum,mv并且ln -s可以解决问题。

另一种可能性是使用 MongoDB 之类的东西将图像存储在数据库中,这可能更容易集群。

于 2012-09-24T10:51:58.260 回答