我有一个视频网站。每当上传文件时,都需要将其与所有其他现有文件(视频)进行比较,以确保它不是重复的。
考虑到每次上传时要比较的文件数量都会变得更大,我正在寻找一种相对较快的解决方案。
理想情况下,这将使用 php 执行,shell_exec
因此如果文件已经存在,它应该返回某种输出(简单的 0 或 1 即可)。
我确实知道cmp
,diff
但我担心由于现有的文件数量太多,这会相当慢。
我还应该研究其他解决方案吗?
答案1
您可以计算每个视频的文件校验和,然后对值列表进行排序。校验和相同的文件就是同一个文件。
为了加快该过程,你可以过滤掉那些大小相当的文件(DELTA 中几个 kb 就足够了),然后只为这组文件计算哈希值
答案2
计算所有视频的校验和/哈希值(sha1sum
),并将校验和列表保存在文件或数据库中。
当您收到新文件时:
- 计算其校验和/哈希值
- 在列表/数据库中搜索此校验和
- 如果发现,则拒绝
- 如果没有找到,则接受并将校验和添加到列表/DB
如果将校验和作为数据库中的附加列,则可以使用校验和列上的唯一性约束来确定是否已经存在具有校验和的文件,并自动使其无法添加到数据库中。
附言:话虽如此,编辑 MP4 中的评论字段以使其看起来像不同的视频是相当容易的。