@DmitrijP

Стоит ли хранить изображения в бд?

Доброго времени суток!

Делаю заказ, заказчик хотел бы, что бы в базу данных (около 11 тысяч уникальных записей) можно было для каждой добавлять картинку. Естественно никто её вручную сжимать не будет. Вопрос: можно ли хранить и выводить практически одновременно такой объём данных? Или стоит объяснить заказчику что это нельзя использовать (заказчик готов обсуждать эту тему, и в случае невозможности согласен отказаться от изображений)?

Заранее спасибо.
  • Вопрос задан
  • 284 просмотра
Решения вопроса 1
firedragon
@firedragon
Senior .NET developer
Мое мнение хранить в базе стоит только метаданные, а картинки в файловой системе.

Плюсы и минусы

В ФС
+ Прямой доступ от вебсервера
+ Меньший обьем БД
+ Меньше тормоза на выборку, коннект доступен сразу
+ Меньший обьем памяти под кэши
- невозможно контролировать отдачу клиенту картинки не добавив код
- нужно бэкапить не только базу

В базе
+ нет мусора в файловой системе
+ можно отдавать картинку определенному клиенту и с определенной скоростью
+/- все в кэше, но прогибаем память, но быстро, но нгинкс все же быстрей
- размер дампа
- тормоза репликации
- просмотреть картинку целый атракцион
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Kozack
@Kozack
Тут мне нравится подход в WordPress:
  1. В базе данных хранятся имена файлов (aaa.png, bbb.jpg);
  2. Отдельно в БД или ещё где-то хранится путь к каталогу, где эти файлы искать. (/path/to/img/folder/);
  3. В файловой системе в указанном выше каталоге, хранятся все файлы с указанными выше именами;
  4. Отдельно в том же месте хранятся оптимизированные, уменьшенные, как либо измененные файлы, с тем же именем но специальным суффиксом. (aaa-100-100.png, aaa-800-600.png, aaa-4k.png).
  5. А далее всё просто: при необходимости получить конечный урл на файл мы указываем ИД файла в БД и суфикс.

    <?php
    getImageURL(1, '800-600'); // → /path/to/img/folder/aaa-800-600.png
    ?>


    И уже эта функция подставляет нужный суффикс и префикс к пути.



Таким образом можно физически хранить несколько модификаций одного и того же файла в файловой системе, но иметь только одну запись в БД и при необходимости легко получать разные версии одного файла в разных местах сайта.
Ответ написан
@FanatPHP
Чебуратор тега PHP
Какой-то странный вопрос.
То есть в бд место под картинки есть, а просто на диске нету? Это где такая конфигурация бывает?

По-моему вы с заказчиком путаетесь в понятиях и не понимаете каких-то базовых принципов.

Такое ощущение, что вы считаете базу данных каким-то волшебным хранилищем, которое сжимает картинки в сто раз.

И при чем здесь "сжимать вручную"? Чем не устраивает сжимать скриптом?

PS: Как всегда, остальные ответы в стиле "папа ты с кем сейчас разговаривал"
Ответ написан
zabudkin
@zabudkin
Инженер-системотехник, программист, админ, ТПУ!!!!
Давайте предположим, на секунду, что картинки в базе.
Это же надо при запросе такой картинки, её вынуть и передать.
Если картинка на диске, то просто отослать по запросу и всё.
Разницу в скорости где-то 100 кратная.
Не нужно в базе хранить картинки.
Ответ написан
Ваш ответ на вопрос

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

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