У меня есть видеосайт. Всякий раз, когда загружается файл, его нужно сравнить со всеми другими существующими файлами (видео), чтобы убедиться, что это не дубликат.
Учитывая, что с каждой загрузкой количество сравниваемых файлов увеличивается, я ищу решение, которое будет относительно быстрым.
В идеале это будет выполняться с использованием shell_exec
php, поэтому он должен вернуть какой-то вывод, если файл уже существует (подойдет простой 0 или 1).
Я знаю об этом cmp
, diff
но боюсь, что с учетом количества существующих файлов это будет довольно медленно.
Есть ли какие-то другие решения, которые мне следует рассмотреть?
решение1
Вы можете вычислить контрольную сумму файла для каждого видео, а затем отсортировать список значений. Те, у которых одинаковая контрольная сумма, являются одним и тем же файлом.
Чтобы ускорить процесс, вы можете отфильтровать файлы по размеру (может быть достаточно нескольких килобайт, так как DELTA), а затем вычислить хэш только для этого набора файлов.
решение2
Вычислите контрольную сумму/хэш ( sha1sum
) всех ваших видео и сохраните список контрольных сумм в файле или базе данных.
Когда вы получаете новый файл:
- вычислить его контрольную сумму/хэш
- поиск этой контрольной суммы в списке/БД
- если найдено, отклонить
- если не найдено, принять и добавить контрольную сумму в список/БД
Если вы сохраняете контрольную сумму как дополнительный столбец в базе данных, ограничение уникальности столбца контрольной суммы можно использовать для определения того, существует ли уже файл с контрольной суммой, и автоматически отменяет его добавление в базу данных.
PS: при этом довольно легко отредактировать поле комментариев в MP4, чтобы оно выглядело как другое видео.