Как грамотно реализовать внешнее файловое хранилище для 1С при большом объеме файлов?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При активной работе с номенклатурой, сериями и прикрепленными документами объем присоединенных файлов в базе 1С может составлять десятки гигабайт. Размещение бинарных данных внутри базы данных (в реквизитах с типом ХранилищеЗначения) неизбежно ведет к раздуванию таблиц СУБД, сильной фрагментации, увеличению размера журналов транзакций и существенному замедлению процессов создания резервных копий.

Разберем, как правильно организовать хранение файлов во внешнем файловом хранилище, избежать ошибок при проектировании каталогов и обеспечить высокую скорость работы системы.

Почему не стоит дублировать иерархию справочника на диске?

Первая идея, которая часто возникает при проектировании — воссоздать на файловом сервере такую же структуру папок, как в справочнике 1С (например, Папка Номенклатуры / Серия / Файлы). Однако у этого подхода есть два существенных недостатка:

  1. Перемещение и переименование элементов в 1С: Если пользователь переместит элемент справочника в другую группу или изменит его наименование, система будет вынуждена перемещать или переименовывать соответствующую папку на диске со всем содержимым. При больших объемах данных это вызывает блокировки файловой системы и ошибки выполнения.
  2. Ограничения файловых систем по количеству элементов: Хотя современные файловые системы (NTFS, EXT4) теоретически поддерживают миллиарды файлов, помещении более 10 000–50 000 папок в одну директорию вызывает серьезное падение производительности при проверке прав доступа, просмотре в проводнике и поиске файлов.

Вариант 1. Иерархия на основе GUID (Уникального Идентификатора)

Один из самых надежных и распространенных подходов — отвязать физическое расположение файлов на диске от названий и иерархии элементов в 1С. Для этого используется уникальный идентификатор объекта (GUID), который генерируется при создании записи в 1С и никогда не меняется.

Чтобы в одной папке не скапливались сотни тысяч элементов, каталог файлового хранилища разбивают на подпапки по первым символам GUID. Проанализируем пример формирования пути к файлу:


Функция ПолучитьПутьКФайлу(ИмяФайла, УникальныйИдентификатор)
    
    // Преобразуем GUID в строку и удаляем дефисы
    ИдентификаторСтр = СтрЗаменить(Строка(УникальныйИдентификатор), "-", "");
    
    // Выделяем первые символы для подкаталогов
    Подпапка1 = Лев(ИдентификаторСтр, 2);
    Подпапка2 = Сред(ИдентификаторСтр, 3, 2);
    
    КаталогФайла = "C:\FileStorage\" + Подпапка1 + "\" + Подпапка2;
    СоздатьКаталог(КаталогФайла);
    
    Возвратить КаталогФайла + "\" + ИмяФайла;
    
КонецФункции

При такой схеме путь к файлу элемента с GUID abcd1234-5678-90ab-cdef-1234567890ab будет выглядеть следующим образом: C:\FileStorage\ab\cd\имя_файла.pdf. Это гарантирует равномерное распределение файлов по каталогам и мгновенную работу файловой системы.

Вариант 2. Иерархия каталогов на основе хэша файла

Если для одного и того же объекта или разных серий номенклатуры часто загружаются идентичные документы (например, сертификаты или инструкции), целесообразно использовать хранение по хэш-сумме файла (MD5 или SHA-256).

Рассмотрим порядок работы этого алгоритма:

  1. При загрузке файла в 1С рассчитывается его хэш-сумма (например, D41D8CD98F00B204E9800998ECF8427E).
  2. На файловом сервере создается двухуровневая структура каталогов по первым символам хэша: ...\D4\1D\D41D8CD98F00B204E9800998ECF8427E.ext.
  3. В базе 1С в служебном реквизите или отдельном регистре сведений сохраняется путь к файлу или его хэш.

Главный плюс данного метода — дедупликация данных. Если один и тот же файл прикрепляется к 100 разным сериям номенклатуры, на диске он будет сохранен в единственном экземпляре, а элементы в 1С будут лишь ссылаться на его хэш.

Вариант 3. Использование S3-совместимого объектного хранилища (MinIO / Ceph)

Для крупных информационных систем хранение файлов в общих сетевых папках (SMB/UNC) со временем становится узким местом. В этом случае правильным решением является использование S3-хранилища (например, MinIO).

Преимущества объектного хранилища:

Технические требования и настройка окружения

При организации файлового хранилища важно учитывать системные настройки сервера приложений 1С:

  1. Права доступа службы 1С: Служба кластера 1С (учетная запись usr1cv8) должна иметь полные права (чтение, запись, изменение) на целевую сетевую папку или локальный каталог. При запуске службы от имени LOCAL SERVICE доступ к сетевым ресурсам по UNC-пути будет заблокирован.
  2. Исключения антивирусного ПО: Антивирусные программы на сервере могут блокировать файлы при проверке в момент их сохранения из 1С. Каталог хранилища необходимо обязательно добавить в исключения сканирования в реальном времени.
  3. Оптимизация передачи файлов через веб-сервер: Чтобы исключить нагрузку на рабочие процессы 1С (rphost) при скачивании пользователями крупных файлов, можно использовать веб-сервер (Nginx или IIS). 1C генерирует временно подписанную ссылку, а выдача файла клиенту происходит напрямую веб-сервером.
← На главную