Автор Тема: MySQL и хранение графических элементов  (Прочитано 6988 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MadDog

  • Главный Металликолог
  • Ветеран
  • *****
  • Сообщений: 679
  • +0/-0
  • 2
    • Просмотр профиля
Интересует такой вопрос. На сколько оправдано (скорость, занимаемый объем, удобство для пользователя и т.п.) хранение графических элементов, например, фотографий и рисунков в базе данных?

Возьмем для примера интернет магазин. Как лучше сделать: хранить фотографии в базе или скидывать их в каталог на сервере?

Некоторые плюсы и минусы для меня очевидны, но хотелось бы узнать и ваше мнение.
So let it be written
So let it be done I\'m creeping death

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #1 : 27 Августа 2002, 09:58:53 »
конечно хранить надо на диске.
При хранении в базе.
скорость - естественно, падает.
объем - тот же. Правда, это если говорить о диске.
а вот оперативная память начинает совершенно на пустом месте тратиться.
удобство для пользователя. Естественно, ему удобнее, когда картинка называется benefon007.jpg, а не pic.php?id=2345&sid=234ERT56DFG5346
удобство для программиста. Меньше сущностей - меньше глюков.
В общем, если, конечно, охота запускать стразу десяток скриптов вместо одного при банальном показе списка товаров одной категории, то, конечно, дело хозяйское...

Оффлайн dymka

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #2 : 27 Августа 2002, 19:53:34 »
я лично не рискую бинарники хранить в базе... база может упасть итп... да и накладных расходов на фетч больше...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #3 : 28 Августа 2002, 00:44:39 »
MadDog
Ни на сколько.
Если често - еще ни разу не сталкивался с НЕОБХОДИМОСТЬЮ хранить графику в базе.
Всегда хватает хранения ссылок на картинки...
AS IS...

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
MySQL и хранение графических элементов
« Ответ #4 : 28 Августа 2002, 05:21:04 »
Позвольте поделиться своим опытом решения этой проблемы.
По моему мнению хранить ли картинки в базе ли, в каталогах ли не имеет никакого значения по отношению к производительности.

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

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

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

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

А с точки зрения программирования ничего нет лучше чем хранить картинки в базе... Хотя о вкусах не спорят :)
« Последнее редактирование: 28 Августа 2002, 05:28:53 от rembo »
программист должен все сделать так, чтоб потом ничего не делать

Оффлайн MadDog

  • Главный Металликолог
  • Ветеран
  • *****
  • Сообщений: 679
  • +0/-0
  • 2
    • Просмотр профиля
MySQL и хранение графических элементов
« Ответ #5 : 28 Августа 2002, 07:19:49 »
Хм, большое всем спасибо. Буду думать.
So let it be written
So let it be done I\'m creeping death

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #6 : 28 Августа 2002, 10:15:22 »
Цитировать
С точки зрения процессора, что база что файловая система это всего навсего процессы которые требуют от него куски его времени,

О! Я так и знал, что вылезет подобное заявление...
Ты конечно все замечательно расписал. Красиво все так. Внушаеть...
Только видимо ты забыл, что драйвер файловой системы работает в режиме ядра, а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...
Почуствовал разницу, или дальше рассказывать ?
AS IS...

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
MySQL и хранение графических элементов
« Ответ #7 : 28 Августа 2002, 10:48:49 »
Цитировать
а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...

Так тем более тогда никакой разницы...
программист должен все сделать так, чтоб потом ничего не делать

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #8 : 28 Августа 2002, 11:46:15 »
[OFF]вчера часиков в 9 вечера получаю от своего шефа SMS следующего содержания:

- почему не рекомендуется использовать BLOB в SQL для хранения фоток?
- потому что всегда найдется придурок, который придет и это проиндексирует!

:) LOL [/OFF]
На Машине Тьюринга далеко не уедешь.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #9 : 28 Августа 2002, 11:51:16 »
rembo
Так тем более разница очевидна...

скрипт->веб-сервер->база->файловый драйвер->база->вывод картинки
скрипт->веб сервер->база->файловый драйвер->база->обработка потока скриптом-> вывод картинки

Почуствовал разницу ?
AS IS...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #10 : 29 Августа 2002, 11:56:33 »
Не, ну мне смешно.
"никакой разницы" - это сильно.
Вместо того, чтобы дать веб-серверу самому отдавать картинку, мы лезем в базу лишний раз, отъедаем память под картинку. получаем в скрипт - отъедаем память под картинку, и... таки вышел опять на Дерибасовскую - толко теперь отдаем  в выходной поток веб-сервера.

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
MySQL и хранение графических элементов
« Ответ #11 : 29 Августа 2002, 12:19:40 »
Беру свои слова назад.
Скорость действительно заметно падает когда картинки большие.
До этого я пробовал такую фишку провернуть с картинками в пару сотен байтов и никакой заметной разницы не обнаружил, вот и полез спорить.
программист должен все сделать так, чтоб потом ничего не делать

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
MySQL и хранение графических элементов
« Ответ #12 : 29 Августа 2002, 15:13:50 »
RomikChef
Во-во. Я о том же...
rembo
А ты не спорь :)
AS IS...

Гость

  • Гость
MySQL и хранение графических элементов
« Ответ #13 : 02 Июля 2004, 20:59:53 »
По-моему вы тут слегка увлеклись в своих выкладках... БД из-за целого ряда фактов работает намного быстрее, чем вы показали на своих чудо-схемах. Другое дело, что кэширование на стороне веб-сервера будет работать только в случае, когда файлы лежат отдельно от БД. И это хорошо.

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

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
MySQL и хранение графических элементов
« Ответ #14 : 02 Июля 2004, 21:18:38 »
Гость
Примеры пожалуйста.... с реальными показателями сервера...
And no religion too...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28