Для проекта с открытым исходным кодом я пишу слой абстракции поверх файловой системы.
Этот слой позволяет мне прикреплять метаданные и отношения к каждому файлу.
Я бы хотел, чтобы слой корректно обрабатывал переименования файлов и поддерживал метаданные, если файл переименовывается / перемещается или копируется.
Для этого мне понадобится механизм для расчета идентичности файла. Очевидное решение состоит в том, чтобы вычислить хэш SHA1 для каждого файла и затем назначить метаданные для этого хеша. Но ... это действительно дорого, особенно для фильмов.
Итак, я думал об алгоритме, который, хотя и не на 100% правильный, будет прав в подавляющем большинстве случаев и дешев.
Одним из таких алгоритмов может быть использование размера файла и выборки байтов для этого файла для вычисления хэша.
Какие байты выбрать для образца? Как сделать расчет дешевым и достаточно точным? Я понимаю, что здесь есть компромисс, но производительность критична. И пользователь сможет обрабатывать ситуации, когда система допускает ошибки.
Мне нужен этот алгоритм для работы с очень большими файлами (1 ГБ + и маленькими файлами 5 КБ)
РЕДАКТИРОВАТЬ
Мне нужен этот алгоритм для работы с NTFS и всеми общими папками SMB (на основе linux или windows), я хотел бы, чтобы он поддерживал ситуации, когда файл копируется из одного места в другое (существует 2 физических копии, которые рассматриваются как одна личность) , Я могу даже подумать о том, чтобы это работало в ситуациях, когда MP3-файлы повторно помечены (физический файл изменен, поэтому у меня может быть поставщик удостоверений для каждого типа файла).
РЕДАКТИРОВАТЬ 2
Смежный вопрос: Алгоритм определения личности файла (Оптимизация)