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

Урок 98 из 281
Автор: Роберт Басыров
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
2 из 5
Дата изменения: 10.04.2021
Просмотров: 1811
Ограничения по редакциям: Ограничений нет

Экономим место на дублях

Система прав доступа давая большие возможности в плане управления доступом имеет недостаток при работе с файлами. К каждому файлу имеют доступ только те, "кому положено". Но если один и тот же файл должен принадлежать разным сущностям, например в CRM, то появляется большое количество одинаковых файлов с разными правами. Это способствует неэффективному использованию дискового пространства. Как на физическом, так и на облачном сервере.

Для экономии места рекомендуется использовать контроль дубликатов загружаемых файлов. В настройках Главного модуля, в секции Файлы есть опции:

По умолчанию эти опции выключены.

Как работает этот механизм

При загрузке локального файла считается хэш md5 от его контента. Ориентировочно, на файл 100 Мб (настройка по умолчанию) уходит 0.2 - 0.3 секунды. Для облачных файлов ограничения по размеру нет, хэш считает облачное хранилище.

Затем по размеру и хэшу загружаемого файла ищется возможный оригинал, загруженный ранее. Если оригинал найден, в таблице b_file добавляется запись, ссылающаяся на существующий физический файл. В таблицу дубликатов добавляется ссылка со счетчиком использования. При удалении файла отслеживаются ссылки дубликатов на него.

В работе механизма используется CFile::SaveFile(). Дополнительно, существует возможность явно добавить дубликат без физической загрузки файла с помощью:

 CFile::AddDuplicate(
   $FILE_ID
).

Где FILE_ID - идентификатор файла.

Примечание: Теоретически существует возможность когда к сущности будет добавлен не тот файл, если совпал размер и md5. Но вероятность этого для отдельного сайта или портала исчезающе мала.


Курсы разработаны в компании «1С-Битрикс»
Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Нам жаль это слышать… Но мы постараемся быть лучше! Поясните, пожалуйста, свой выбор:

Мы благодарны Вам за помощь в улучшении документации.

Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас