PHP для хранения изображений в MySQL или нет? - PullRequest
31 голосов
/ 09 февраля 2009

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

Мне нужно будет убедиться, что изображение меньше определенного размера, чтобы сохранить пространство, или обеспечить конкретное разрешение, или и то, и другое, или даже, возможно, использовать что-то вроде изображения-магии, чтобы уменьшить его. Не уверен, что лучший подход к этому еще, любые идеи приветствуются.

Кроме того, я пытался выяснить, лучше ли хранить изображение в таблице users MySQL в виде большого двоичного объекта или, возможно, в отдельной таблице images с уникальным идентификатором, и просто сохранить соответствующие идентификатор изображения в таблице users или просто сохраните загруженный файл на сервере (также через страницу загрузки) и сохраните файл как theUsersUniqueUsername.jpg. Лучший вариант?

Я нашел учебник по сохранению изображений в mysql здесь: http://www.phpriot.com/articles/images-in-mysql

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

Ответы [ 16 ]

2 голосов
/ 09 февраля 2009

Я думаю, что большинство механизмов баз данных уже настолько продвинуты, что хранение BLOB-данных не имеет никаких недостатков (раздутая база данных и т. Д.) Одним из преимуществ является то, что у вас нет битых ссылок, когда изображение уже находится в базе данных. При этом я сам всегда делал так, чтобы сохранить файл на диске и передать URI в базу данных. Это зависит от использования. Может быть проще обрабатывать img-in-db, если страница очень динамичная и часто меняется - без проблем с пространством имен. Я должен сказать, что это заканчивается тем, что вы предпочитаете.

1 голос
/ 15 февраля 2014

После нескольких дней исследований я создал систему хранения изображений и двоичных файлов в базе данных.

Это было просто великолепно. Теперь у меня есть 100% контроль над файлами, например, контроль доступа, изменение размера изображения (конечно, я не масштабирую изображения динамически), статистика, резервное копирование и обслуживание.

В моих тестах скорости система теперь в 10 раз медленнее. Однако он все еще не запущен, и я буду внедрять системный кеш и другие оптимизации.

Проверьте этот реальный пример, все еще находящийся в разработке, на хосте SHARED, используя MVC: http://www.gt8.com.br/salaodocalcado/calcados/meia-pata/

В этом примере, если пользователь вошел в систему, он может видеть разные изображения. Все изображения продуктов и другие двоичные файлы находятся в БД, не кэшируются, а не в ФС.

Я провел несколько тестов на выделенном сервере, и результаты превзошли все ожидания.

Так что, по моему личному мнению, хотя для этого нужно приложить немало усилий, хранение изображений в БД стоит, а преимущества стоят гораздо дороже.

0 голосов
/ 08 июня 2016

В моем случае я храню файлы в файловой системе . В моей папке с изображениями я создаю новую папку для каждого элемента с именем на основе идентификатора элемента (строка из БД). И назовите изображения в порядке, начиная с 0. Так что, если у меня есть таблица с именем Items, как это:

       Items      
|-----|------|-----|
| ID  | Name | Date|
|-----|------|-----|
| 29  | Test1| 2014|
|-----|------|-----|
| 30  | Test2| 2015|
|-----|------|-----|
| 31  | Test3| 2016|
|-----|------|-----|

мой каталог изображений выглядит примерно так:

images/
      29/
      30/
      31/


images/29/0.png
images/29/1.jpeg
images/29/2.gif

и т.д.

0 голосов
/ 29 января 2014

Это плюсы обоих решений

В BLOBS:

1) плюсы: простота управления кластерами, поскольку вам не нужно обрабатывать сложные моменты, такие как синхронизация файлов между серверами

2) Резервные копии БД также будут исчерпывающими

В файлах

1) Удобное собственное кэширование (и это упущенная часть предыдущих комментариев, с обновлением и заголовками, которые вам не придется перепроектировать в БД (БД по умолчанию не обрабатывает время последней модификации)

2) Простота изменения размера позже

3) Простота модерации (просто пройдите по папкам, чтобы проверить, все ли правильно)

По всем этим причинам, и поскольку в файловой системе проще копировать два преимущества баз данных, я настоятельно рекомендую файлы!

0 голосов
/ 31 марта 2011

Только что проверил мои img как капли. Это решение работает медленнее, чем изображения на сервере в виде файла. Время загрузки должно быть одинаковым с изображениями из БД или http, но это не так. Зачем? Я уверен, что когда изображения являются файлами на сервере, браузер может кэшировать их и загружать только один раз, в первый раз. Когда образ собирается из БД, каждый раз загружается снова. Это мое мнение. Возможно, я ошибаюсь в кэшировании браузера, но работаю медленнее (blob). Извините мой английский, что угодно; P

0 голосов
/ 11 февраля 2009

Как все говорили, никогда не храните изображения в базе данных. Файловая система используется для хранения файлов -> изображения являются файлами -> хранят их в файловой системе: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...