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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Страница-источник на сайте falconspace.ru