При проектировании систем, в которых предполагается активный документооборот или прикрепление файлов к объектам учета (размером от 1 до 5 МБ и выше), разработчики часто сталкиваются с вопросом выбора оптимального места хранения. Проанализируем типичную дилемму: стоит ли делить файлы на два регистра сведений (например, для основных и дополнительных файлов), хранить ли бинарные данные непосредственно в СУБД или выносить их во внешние хранилища и архивы.
Разберем ситуацию с точки зрения архитектуры СУБД. В платформе 1С бинарные данные файлов помещаются в реквизиты с типом ХранилищеЗначения. На уровне реляционных баз данных (таких как MS SQL Server или PostgreSQL) подобные поля обрабатываются как LOB (Large Object). Это означает, что если размер содержимого превышает несколько килобайтов, СУБД физически размещает его вне основных строк таблицы — на специализированных страницах данных LOB, оставляя в основной строке лишь указатель.
Следовательно, разделение одного логического массива файлов на два отдельных регистра (например, «ОсновныеФайлы» и «ДополнительныеФайлы»):
Если требуется логически разделять файлы на основные и дополнительные, гораздо эффективнее добавить в структуру единого регистра измерение или реквизит с типом перечисления ВидФайла.
Посмотрим на последствия, к которым приводит хранение сотен гигабайт файлов непосредственно в базе данных:
ХранилищеЗначения файл полностью загружается в память рабочего процесса сервера 1С (rphost). Если несколько пользователей одновременно открывают или выгружают тяжелые файлы (от 1 до 5 МБ), это провоцирует лавинообразный рост потребления RAM и может вызвать аварийный перезапуск рабочих процессов.Рассмотрим, как правильно решить задачу хранения больших объемов файлов на практике, опираясь на типовые подходы и опыт разработки.
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) реализован механизм разделения: в самой базе данных хранятся только метаданные (наименование, размер, дата, ссылка на объект-владелец, контрольная сумма), а сами бинарные файлы физически записываются на сетевые тома (папки на сервере или в локальной сети).
Преимущества данного подхода:
Важная техническая деталь: права доступа к сетевой папке (UNC-пути) должны быть предоставлены не учетным записям пользователей, а учетной записи операционной системы, под которой запущен агент сервера 1С:Предприятия (по умолчанию usr1cv8), так как все операции с файлами на томах выполняет серверный процесс.
Если специфика учета требует обязательного хранения оперативных данных внутри базы, можно применить комбинированную схему:
Если для архива создается отдельная база 1С, не рекомендуется организовывать обмен через устаревший механизм COM-соединения. COM привязан к среде Windows, не поддерживается на серверах под управлением Linux и медленно отрабатывает в многопоточном режиме. Взаимодействие между основной и архивной базой эффективнее реализовать через встроенные HTTP-сервисы с использованием объекта HTTPСоединение, передавая бинарные потоки напрямую.
Если реализация регистра сведений для файлов выполняется с нуля, обязательно учтем следующие правила:
ХранилищеЗначения в форму списка регистра или использовать его в запросе динамического списка. В противном случае платформа будет вычитывать тяжелые бинарные данные для каждой отображаемой строки, что парализует работу пользовательского интерфейса. Список должен содержать только метаданные: имя, расширение, размер.