9.9Kпросмотров
91.4%от подписчиков
5 ноября 2025 г.
question📷 ФотоScore: 10.9K
Blob в mysql или ссылки на файлы — как выбрать? 🗂️
Задача: нужно хранить файлы (фото, pdf, видео). Где их держать: прямо в базе (BLOB) или во внешнем хранилище (например, S3) и в БД — только ссылку? Разберёмся коротко и понятно. Что такое blob и «ссылки»
🔹 BLOB — двоичные данные прямо в таблице MySQL (поле BLOB/LONGBLOB).
🔹 Ссылка — файл лежит во внешнем хранилище, а в БД мы храним URL + метаданные (имя, размер, тип). Когда хранить в базе (blob) 📦
Подходит, если:
🔹файлы небольшие (аватарки, превью, ≤ ~1 МБ);
🔹важна атомарность: данные и файл сохраняются/откатываются вместе;
🔹проект простой, без CDN и стриминга. Плюсы: просто, транзакционно, один бэкап.
Минусы: база быстро растёт, бэкапы тяжелее, отдавать большие файлы медленно. Мини-пример CREATE TABLE file_blobs ( id BIGINT PRIMARY KEY, name VARCHAR(255), mime VARCHAR(100), size INT, -- для дедупликации sha256 BINARY(32), -- сам файл data LONGBLOB NOT NULL, created_at TIMESTAMP, UNIQUE KEY (sha256)
); Когда хранить снаружи (ссылки) 🔗
Подходит, если:
🔹файлов много или они крупные (фото/видео/доки);
🔹нужна раздача через CDN (быстрая доставка);
🔹важны дешёвое хранилище и лёгкие бэкапы БД. Плюсы: масштабируемо, дёшево, быстро отдаётся.
Минусы: две системы (БД + хранилище). Мини-пример CREATE TABLE files ( id BIGINT PRIMARY KEY, name VARCHAR(255), mime VARCHAR(100), size INT, sha256 BINARY(32), -- https://... или s3://... storage_url VARCHAR(2048) NOT NULL, created_at TIMESTAMP, UNIQUE KEY (sha256)
); Быстрый чек-лист выбора ✅
🔹Размер: маленькие → BLOB; большие → ссылка.
🔹Транзакционность (вместе с бизнес-данными): нужна → BLOB.
🔹 Отдача файлов пользователям: нужен CDN → ссылка.
🔹Бэкапы и восстановление: хочется лёгких дампов → ссылка.
🔹Стоимость хранения: экономим → ссылка. Вывод
🔹BLOB хорош для маленьких файлов и строгой консистентности.
🔹Ссылки — почти всегда лучший выбор для больших объёмов, скорости и экономии.