@delta_pr0

Как можно, и вообще можно ли хранить фото и видео в базе данных mongo?

У меня возникла потребность хранить фото и видео в базе данных, я обыскал весь интернет но ничего понятного не нашел, только понял то что это делается через какой то фреймворк. Если знакомы с этим не объясните как можно это реализовать?
  • Вопрос задан
  • 2382 просмотра
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Если человек ничего не понимает в какой-то теме, он никогда не должен выступать с заявлениями вида "у меня возникла потребность". Потому что такие заявления базируются не на реальных потребностях, а на неграмотности, фантазиях и путанице в голове. И получаются вопросы вида "У меня возникла потребность забивать гвозди микроскопом. Я обыскал весь интернет но ничего понятного не нашел, только понял то что это делается на кухне. "

Вместо таких заявлений он должен подробно изложить исходную задачу.
Про которую ему подробно расскажут, как её решать нормально.

Хранить фото и видео в БД - это как надевать штаны на голову.
Хранить фото и видео в монге - как надевать на голову помойное ведро.

Файлы надо хранить в файловой системе.
Структурированные данные надо хранить в Базе Данных.
Монгу не нужно использовать ни для чего. Это вообще не база данных, а просто хранилище по типу "куча мусора", которое используется исключительно в стильных модных молодёжных стартупах, в которых не нашлось ни одного специалиста по базам данных. Это была тупиковая ветвь, поднявшаяся на отсутствовавшей на тот момент поддержке JSON в базах данных и хайпе
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Попробую объяснить плюсы и минусы хранения файлов в БД.

Плюсы:
* 1 точка бэкапа - база данных
Минусы:
* огромный размер бэкапа, долгое время его создания, долгое время восстановления из него
* картинки кэшируются в горячем наборе страниц бд и вытесняют данные, то есть не эффективно используется память, да и данные не используются оптимально
* постоянная нагрузка на процессор и дисковую систему для преобразования из набора байтов в файл
* веб сервер не может закэшировать этот результат
* веб сервер не может просто стримить этот файл, так как файла нет
* больше дискового пространства
Ответ написан
Комментировать
GavriKos
@GavriKos
База данных - это хранилище информации. Фото и видео - информация. Значит можно. Если база не умеет работать с бинарными данными - переводите в base64 и храните как строку.

Но - нужно очень понимать, зачем вы это делаете (в принципе касается любого вопроса). Точно тут будет профит от базы данных? Или лучше хранить в БД только пути к файлам?
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Технически - можно. Но MongoDb оптимизирована для хранения документов. И если вместо документов
туда складывать фильмы то может оказаться так что вы платите очень много за такие блобы которые
выгоднее держать на файловой системе или на сторедже
. Привету пример. Если вы храните
документ в котором десяток текстовых полей и 11 поле - это блоб с фильмом длиной 1.5Гб то
получается что реально полезная для поиска и индексирования информация составляет
менее 1% (!)
от общего размера БД. А все остальное - это балласт. Я как бывший базовик
привык что в таблицах БД лежит только полезная и нужная для SELECT ... WHERE информация.
Если эта информация не полезна для поиска - то ей не место в БД.

Хуже того что эти блобы будут вовлечены в процесс планового бэкапа. Даже если они не изменялись.
Может возникнуть кейс когда скопировать БД все таки надо. А копировать тяжело. БД уже превысила
пета-байт просто потому что кто-то захотел фильмы хранить рядом с данными.

Я не специалист конкретно по Монге но вот тут пишут о реализациях хранения блобов https://www.mongodb.com/developer/products/mongodb...

Почитайте.
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Ищите информацию по запросу "mongodb bson gridfs"
https://www.mongodb.com/blog/post/building-mongodb...
Данные до 16 Мб - BSON, больше 16 Мб - GridFS (под капотом автоматическое разбиение файла на куски, те же 16 Мб и управление их хранением и склейкой)

p.s. файлы лучше хранить на диске или в объектном хранилище, а в mongodb метаинформацию и ссылку на файл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы