Лучший подход для хранения загруженного изображения - PullRequest
2 голосов
/ 15 марта 2010

Каковы преимущества и недостатки хранения изображения в виде большого двоичного объекта в базе данных по сравнению с хранением только имени файла в базе данных.

Я использую PHP (CodeIgniter) с MySQL.

Я знаю, что этот вопрос субъективен, но клиент задал мне этот вопрос, и я не смог дать хороший ответ.

Ответы [ 3 ]

14 голосов
/ 15 марта 2010

Я бы вообще сказал, что:

  • базу данных сложнее масштабировать:
    • при наличии БД размером несколько ГБ из-за образов будет много вещей (например, резервное копирование) сложнее.
    • Вы хотите увеличить нагрузку на серверы БД, чтобы обслуживать ... файлы?
  • обслуживание изображений из файловой системы - это то, что веб-серверы делают хорошо
    • и позволяет выполнять некоторые задачи (например, создание миниатюр) без участия сервера БД
    • Полагаю, если нужно, что использование простых старых файлов также облегчит работу в тот день, когда вы захотите использовать какой-то тип CDN

Это означает, что я почти всегда буду хранить изображения / файлы в файловой системе и сохраню только имя файла (и, возможно, размер и тип содержимого - это всегда может быть полезно) в базе данных .


Думая об этом, этот вопрос, вероятно, является дубликатом ... О, да, это действительно так; увидеть хотя бы те вопросы + ответы:

1 голос
/ 15 марта 2010

Я сомневаюсь, что у вашего клиента достаточно опыта, чтобы судить об ответе.
Однажды клиент попросил меня хранить изображение строго в базе данных. После некоторых исследований я обнаружил, что они просто имели в виду «хранить изображения на стороне сервера», потому что раньше у них была база данных MS Access, и у нее был выбор между хранением изображений в базе данных или просто ссылками на изображения, тогда как само изображение оставался на жестком диске пользователей и часто был недоступен.

Что касается вашего вопроса, я сомневаюсь, что изображение имеет какое-либо отношение к реляционной модели. Вы не можете сортировать, фильтровать, связывать с другими строками на основе содержимого BLOB-объектов. В то время как для поддержки изображений в базе данных приходится много чего делать - выделенный скрипт для показа, эмуляция условного получения и т. Д. Я знаю, эта функция существует. Но это скорее очевидная попытка следовать моде, чем реальная потребность, особенно в веб-разработке, где изображения запрашиваются с помощью отдельных запросов.

0 голосов
/ 18 апреля 2012

Я предпочитаю переименовывать файлы изображений при загрузке и сохранять их в строке базы данных, связанной с его собственным родителем (пользователь, продукт,) ... затем загружать их в 3 папки:

/uploads
  /img
    /products
     /small 
     /medium 
     /xxl 

изменив их размеры на маленькие (50x50), средние (90x90), xxl (исходное измерение), прежде чем перемещать их в эти каталоги.

если вам нужны изображения SEO, вы можете сохранить их, например:

id | product | image
1    book      1-book.png

, поэтому вы получите идентификатор и название продукта в одном файле изображения.

или вы можете просто хранить

id | product | image
1    book      1.png

тогда просто присоединить пути src:

/*Config file*/
$config['base_static_products_url'] = 'uploads/img/products/';

/*View file*/

<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->image ?>" alt=""/>

OR (no SEO)

<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->id.'.png' ?>" alt=""/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...