При активном электронном документообороте и накоплении сканов, таблиц и текстовых файлов в корпоративной системе неизбежно встает вопрос: где и как физически хранить терабайты информации, чтобы база данных не деградировала по производительности? Нередко возникает идея создавать отдельные базы 1С или отдельные таблицы под каждого контрагента или проект. Разберем, почему подобный подход ведет к архитектурному тупику, и рассмотрим лучшие практики организации файлового хранилища.
На первый взгляд кажется, что разделение файлов по отдельным информационным базам защитит основную рабочую базу от разрастания. Однако на практике создание сотен баз в год (например, под каждый проект) влечет за собой критические проблемы:
rmngr, rphost) расходуют значительные объемы оперативной памяти на поддержание метаданных, пулов соединений и фоновых заданий для каждой зарегистрированной базы, даже если она простаивает. Сотни баз быстро исчерпают ресурсы сервера.Специализированная файловая система — это наиболее эффективная среда для хранения бинарных данных. Сравним хранение непосредственно в СУБД (в реквизитах типа ХранилищеЗначения) и на дисковых томах:
tempdb).В типовых решениях («1С:ERP», «1С:Комплексная автоматизация», «1С:Управление торговлей», «1С:Документооборот») и в «Библиотеке стандартных подсистем» (БСП) предусмотрен готовый механизм «Присоединенные файлы». Он решает задачу разделения метаданных и физических файлов «из коробки».
Рассмотрим структуру метаданных, используемую в этом механизме:
Справочник.ДоговорыКонтрагентовПрисоединенныеФайлы. Он содержит реквизиты: наименование, расширение, размер, контрольную сумму (MD5 или SHA-256), автора, признак редактирования и ссылку на владельца.Если стоит выбор между подчиненным справочником и регистром сведений для кастомной реализации, предпочтение следует отдавать справочнику: он позволяет организовать иерархическую структуру папок, сохраняет ссылочную целостность и упрощает разграничение прав доступа на уровне записей (RLS).
При хранении сотен тысяч файлов в одном каталоге файловая система (особенно NTFS) испытывает серьезное падение производительности при операциях перечисления файлов, синхронизации и резервном копировании. Для предотвращения деградации каталоги необходимо иерархически разделять.
Проанализируем правильный алгоритм распределения файлов по структуре папок с использованием хэш-суммы:
Посмотрим на пример формирования пути сохранения файла на сервере:
Функция ПолучитьОтносительныйПутьКФайлу(ХэшФайла, Расширение) Экспорт
// Берем первые два символа для каталога первого уровня
ПапкаУровень1 = Сред(ХэшФайла, 1, 2);
// Берем следующие два символа для каталога второго уровня
ПапкаУровень2 = Сред(ХэшФайла, 3, 2);
// Формируем относительный путь: \ab\cd\abcdef1234567890.pdf
ИмяФайла = ХэшФайла + ?(ПустаяСтрока(Расширение), "", "." + Расширение);
ОтносительныйПуть = ПапкаУровень1 + "\" + ПапкаУровень2 + "\" + ИмяФайла;
Возврат ОтносительныйПуть;
КонецФункции
Критически важный аспект хранения на томах — безопасность данных при разворачивании тестовых баз. Если разработчик или администратор восстановит копию рабочей базы и начнет тестирование, транзакции могут перезаписать или удалить боевые файлы с диска.
Для защиты необходимо использовать следующие правила:
БлокировкаРаботыСВнешнимиРесурсами. При изменении параметров подключения (имени сервера СУБД или имени базы) система автоматически переводит тома в режим «Только чтение» или блокирует к ним доступ.usr1cv8). Обычные пользователи не должны иметь прямого сетевого доступа к папке с файлами. Все операции производятся исключительно через серверные вызовы.В современных высоконагруженных системах сетевые папки SMB/NFS вытесняются объектными хранилищами, совместимыми с протоколом S3 (например, открытым решением MinIO). Это дает существенные преимущества:
Создание отдельных баз данных 1С под каждого контрагента или проект для хранения файлов архитектурно нецелесообразно и быстро парализует администрирование системы. Оптимальным решением является использование единой рабочей конфигурации со стандартной подсистемой присоединенных файлов (БСП), где файлы физически выносятся на серверные тома хранения или в объектное S3-хранилище с обязательным разбиением по подкаталогам на основе дат или хэш-сумм.