Почему мы не храним файлы в базе данных – отдельное файловое хранилище и как его подключить

Время чтения - 4 мин.
Дата публикации 05.07.2026

Файлы — неизбежная часть любого приложения: фотографии товаров, скан-копии документов, прикреплённые к заказам файлы, аватарки пользователей. Куда их сохранять? В базу данных (как BLOB) или в файловую систему? У каждого подхода есть плюсы и минусы. Мы в Falcon Space выбрали раздельное хранение: файлы лежат на диске (или в облаке), а в базе хранятся только пути к ним. Расскажу, почему это правильнее и как настроить файловый менеджер.

Два подхода: в базе данных vs на диске

Хранение в базе данных (BLOB, VARBINARY(MAX))

  • Плюсы: файлы в бэкапе базы — восстанавливается всё вместе. Легче синхронизировать между серверами (репликация).
  • Минусы: база данных раздувается (10 ГБ файлов + 10 ГБ данных). Размер бэкапов растёт. Скорость чтения/записи ниже, чем у файловой системы. Сложно дать прямой доступ к файлу (нужно выгружать через код).

Хранение на диске / в облаке (файловая система)

  • Плюсы: высокая скорость чтения и записи. Лёгкость резервного копирования (только база). Можно дать прямую ссылку на файл (через веб-сервер). Удобно масштабировать (отдельный диск, сетевые хранилища, облако).
  • Минусы: бэкапы и восстановление должны быть синхронизированы (база + файлы). При переносе на другой сервер нужно копировать и то, и другое.

В Falcon Space мы используем второй подход. Основные причины:

  • Производительность — чтение файла через веб-сервер в 10 раз быстрее, чем через базу данных.
  • Размер базы — при миллионе файлов по 1 МБ база стала бы более 1 ТБ, что снизило бы скорость всех запросов.
  • Удобство — клиенту можно дать прямую ссылку на файл (защищённую токеном).

Как устроен файловый менеджер в Falcon Space

В платформе есть компонент «Файловый менеджер», который привязывается к любой сущности (заказ, клиент, проект). Файлы хранятся в папке на диске (например, D:\Files\Orders\123\doc.pdf). В базе — только путь и метаданные (имя файла, размер, дата загрузки, кто загрузил).

При отображении страницы заказа клиент видит список прикреплённых файлов, может скачать их, удалить (если есть права), загрузить новые. Drag-and-drop, мультизагрузка.

Администратор может настроить:

  • Корневую папку для хранения (локальный диск, сетевой диск, NAS).
  • Максимальный размер файла (по умолчанию 100 МБ).
  • Разрешённые расширения (например, только .pdf, .jpg, .png).
  • Автоматическое создание миниатюр для изображений.

Всё это делается через административный интерфейс, без кода.

Где лучше хранить файлы: локальный диск, NAS или облако

Локальный диск сервера (D:\Files)

  • Самый быстрый доступ.
  • При поломке сервера файлы могут быть утеряны (нужны бэкапы).
  • Объём ограничен диском сервера (обычно 40-100 ГБ на VPS).

Сетевое хранилище (NAS, отдельный файловый сервер)

  • Файлы отделены от сервера, их легче бэкапить.
  • Доступ медленнее, чем локальный диск (сетевой трафик).
  • Подходит для больших объёмов (десятки терабайт).

Облачное хранилище (Google Диск, Yandex Диск, S3, Selectel)

  • Не нужно думать о бэкапах — провайдер отвечает за сохранность.
  • Доступ из любой точки (если интернет есть).
  • Стоимость за объём (обычно 1-3 руб/ГБ в месяц).
  • Скорость ниже, чем у локального диска, но для небольших файлов (PDF) незаметно.

В Falcon Space поддерживаются все три варианта. Настройка — через указание пути в конфигурации.

Настройка файлового менеджера в вашем проекте

Если у вас уже есть сайт на Falcon Space, добавить файловый менеджер на страницу заказа:

  1. Откройте страницу заказа в редакторе.
  2. Добавьте компонент «Файловый менеджер» в нужное место.
  3. Укажите, к какой таблице и полю привязывать файлы (например, orders.attachments).
  4. Настройте папку хранения: можно использовать шаблоны, например, D:\Files\Orders\{order_id}.
  5. Сохраните страницу.

Всё. Файловый менеджер готов. Пользователи смогут загружать, скачивать, удалять файлы. Все действия с файлами (загрузка, удаление) записываются в лог.

Рекомендации по бэкапам

Поскольку файлы отделены от базы данных, бэкап должен включать оба компонента. Мы рекомендуем:

  • Бэкап базы данных — раз в день (SQL Server Agent или сторонние инструменты).
  • Бэкап папки с файлами — раз в день (roboсopy, rsync или средства хостинга).
  • Хранить бэкапы на другом диске или в облаке.

При восстановлении после сбоя вы восстанавливаете базу и копируете файлы. Если бэкапы выполнены в одно время, данные не разъедутся.

Пример из практики: хранение PDF-счетов

В CRM для грузоперевозок каждый заказ имеет счёт, акт, транспортную накладную (PDF). Мы храним эти файлы в папке D:\Files\Invoices\{order_id}\*.pdf. В личном кабинете клиент видит список документов и может скачать их одним нажатием. Сотрудники бухгалтерии могут загружать свои файлы (например, скан подписанного договора). Общий объём файлов за год — 20 ГБ. База данных — 5 ГБ. Бэкапы быстрые и лёгкие.

Если бы мы хранили файлы в базе, её размер был бы 25 ГБ, бэкапы — в 5 раз тяжелее, время восстановления — дольше.

Храните файлы отдельно от базы данных. Это быстрее, дешевле и удобнее для администрирования.

Насколько полезной была статья?
Falcon Space, автор блога

Автор статьи - Руслан Раянов

Cоздатель платформы Falcon Space
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK