Хранение картинок в БД: за и против?

Здравствуйте. У меня возникла такая проблема: мне нужно хранить около 200 тисяч картинок в месяц ( картинка здесь в основном скан документа). Как можно подсчитать, за год мы будем имеиь 2,4 млн картинок. И тут вопрос: как лутше их хранить? в интернете я прочитал пару подходов: хранение как BLOB, хранение файлов, а в БД только ссылку на файл. При этого однозначного ответа нет. Так все таки что Лутше? Для меня важно быстродействие и целестность. Сервер БД достаточно мощный и проведе анализ запросов, я дозволено их быстродействием.
  • Вопрос задан
  • 44667 просмотров
Пригласить эксперта
Ответы на вопрос 6
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Тут есть нюансы. Если вы будете хранить изображение в базе в виде BLOBа, то когда пользователь запросит с сервера данные все данные будут загружены в память. А это много. С другой стороны если получить только путь к файлу, можно отправить пользователю лишь этот самый путь либо стримить картинку средствами сервера/php. В этом случае потребление памяти будет минимальным.
Ответ написан
4dmonster
@4dmonster
Хранить в виде BLOB в базе — нельзя!
Только внешние файлы!

А уж при таких количествах — тем более.

А «При этого однозначного ответа нет» только потому, что 18 иконок 16на16 в десктопном приложении ещё терпимо запихать в базу ради облегчения работы ленивого программиста.
Ответ написан
bliznezz
@bliznezz
Filestream — компромис между «хранением данных как файлов на файловой системе» и блобами в базе technet.microsoft.com/ru-ru/sqlserver/hh182406
По сути то — на файловой системе, но с нативным доступом из SQL-сервера как блобов.
Ответ написан
Комментировать
Если у Вас web-проект, то однозначно сохранять в базе ссылки на файлы или называть файлы по значением ключей. Причина: web-сервер и ОС сможет кэшировать эти данные, что достаточно существенно снижает нагрузку.
Ответ написан
Комментировать
MpaK999
@MpaK999
Буду!
Конечно лучше столько файлов в файловой системе хранить, но если хочется в базе, то тут могут помочь например CouchDB база и аналоги.
Ответ написан
Комментировать
@dkurilenko
А что мешает хранить и там и здесь: при загрузке картинки сохраняете в базу данных. Перед базой ставите кеш (файловый кеш или в памяти — самый простой LRU). При доступе проверяете кеш, если нет в кеше, идете в базу и добавляете в кеш. Учитывая то, что кеш будет LRU, то самый популярные будут отдаваться из кеша, а остальное все из базы. База предпочтительней с точки зрения репликации и надежности.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы