Контроль дубликатов

Экономим место на дублях |
Система прав доступа давая большие возможности в плане управления доступом имеет недостаток при работе с файлами. К каждому файлу имеют доступ только те, "кому положено". Но если один и тот же файл должен принадлежать разным сущностям, например в CRM, то появляется большое количество одинаковых файлов с разными правами. Это способствует неэффективному использованию дискового пространства. Как на физическом, так и на облачном сервере.
Для экономии места рекомендуется использовать контроль дубликатов загружаемых файлов. В настройках Главного модуля, в секции Файлы есть опции:
По умолчанию эти опции включены.
Как работает этот механизм
При загрузке локального файла считается хэш md5 от его контента. Ориентировочно, на файл 100 Мб (настройка по умолчанию) уходит 0.2 - 0.3 секунды. Для облачных файлов ограничения по размеру нет, хэш считает облачное хранилище.
Затем по размеру и хэшу загружаемого файла ищется возможный оригинал, загруженный ранее. Если оригинал найден, в таблице b_file добавляется запись, ссылающаяся на существующий физический файл. В таблицу дубликатов добавляется ссылка со счетчиком использования. При удалении файла отслеживаются ссылки дубликатов на него.
В работе механизма используется CFile::SaveFile(). Дополнительно, существует возможность явно добавить дубликат без физической загрузки файла с помощью:
CFile::AddDuplicate( $FILE_ID ).
Где FILE_ID - идентификатор файла.
и Ваше мнение важно для нас