Forum Webscript.Ru

Общие => Базы данных => Тема начата: MadDog от 27 Августа 2002, 08:56:22

Название: MySQL и хранение графических элементов
Отправлено: MadDog от 27 Августа 2002, 08:56:22
Интересует такой вопрос. На сколько оправдано (скорость, занимаемый объем, удобство для пользователя и т.п.) хранение графических элементов, например, фотографий и рисунков в базе данных?

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

Некоторые плюсы и минусы для меня очевидны, но хотелось бы узнать и ваше мнение.
Название: MySQL и хранение графических элементов
Отправлено: Меняздесьдавнонет от 27 Августа 2002, 09:58:53
конечно хранить надо на диске.
При хранении в базе.
скорость - естественно, падает.
объем - тот же. Правда, это если говорить о диске.
а вот оперативная память начинает совершенно на пустом месте тратиться.
удобство для пользователя. Естественно, ему удобнее, когда картинка называется benefon007.jpg, а не pic.php?id=2345&sid=234ERT56DFG5346
удобство для программиста. Меньше сущностей - меньше глюков.
В общем, если, конечно, охота запускать стразу десяток скриптов вместо одного при банальном показе списка товаров одной категории, то, конечно, дело хозяйское...
Название: MySQL и хранение графических элементов
Отправлено: dymka от 27 Августа 2002, 19:53:34
я лично не рискую бинарники хранить в базе... база может упасть итп... да и накладных расходов на фетч больше...
Название: MySQL и хранение графических элементов
Отправлено: ThE0ReTiC от 28 Августа 2002, 00:44:39
MadDog
Ни на сколько.
Если често - еще ни разу не сталкивался с НЕОБХОДИМОСТЬЮ хранить графику в базе.
Всегда хватает хранения ссылок на картинки...
Название: MySQL и хранение графических элементов
Отправлено: rembo от 28 Августа 2002, 05:21:04
Позвольте поделиться своим опытом решения этой проблемы.
По моему мнению хранить ли картинки в базе ли, в каталогах ли не имеет никакого значения по отношению к производительности.

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

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

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

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

А с точки зрения программирования ничего нет лучше чем хранить картинки в базе... Хотя о вкусах не спорят :)
Название: MySQL и хранение графических элементов
Отправлено: MadDog от 28 Августа 2002, 07:19:49
Хм, большое всем спасибо. Буду думать.
Название: MySQL и хранение графических элементов
Отправлено: ThE0ReTiC от 28 Августа 2002, 10:15:22
Цитировать
С точки зрения процессора, что база что файловая система это всего навсего процессы которые требуют от него куски его времени,

О! Я так и знал, что вылезет подобное заявление...
Ты конечно все замечательно расписал. Красиво все так. Внушаеть...
Только видимо ты забыл, что драйвер файловой системы работает в режиме ядра, а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...
Почуствовал разницу, или дальше рассказывать ?
Название: MySQL и хранение графических элементов
Отправлено: rembo от 28 Августа 2002, 10:48:49
Цитировать
а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...

Так тем более тогда никакой разницы...
Название: MySQL и хранение графических элементов
Отправлено: fidget от 28 Августа 2002, 11:46:15
[OFF]вчера часиков в 9 вечера получаю от своего шефа SMS следующего содержания:

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

:) LOL [/OFF]
Название: MySQL и хранение графических элементов
Отправлено: ThE0ReTiC от 28 Августа 2002, 11:51:16
rembo
Так тем более разница очевидна...

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

Почуствовал разницу ?
Название: MySQL и хранение графических элементов
Отправлено: Меняздесьдавнонет от 29 Августа 2002, 11:56:33
Не, ну мне смешно.
"никакой разницы" - это сильно.
Вместо того, чтобы дать веб-серверу самому отдавать картинку, мы лезем в базу лишний раз, отъедаем память под картинку. получаем в скрипт - отъедаем память под картинку, и... таки вышел опять на Дерибасовскую - толко теперь отдаем  в выходной поток веб-сервера.
Название: MySQL и хранение графических элементов
Отправлено: rembo от 29 Августа 2002, 12:19:40
Беру свои слова назад.
Скорость действительно заметно падает когда картинки большие.
До этого я пробовал такую фишку провернуть с картинками в пару сотен байтов и никакой заметной разницы не обнаружил, вот и полез спорить.
Название: MySQL и хранение графических элементов
Отправлено: ThE0ReTiC от 29 Августа 2002, 15:13:50
RomikChef
Во-во. Я о том же...
rembo
А ты не спорь :)
Название: MySQL и хранение графических элементов
Отправлено: Гость от 02 Июля 2004, 20:59:53
По-моему вы тут слегка увлеклись в своих выкладках... БД из-за целого ряда фактов работает намного быстрее, чем вы показали на своих чудо-схемах. Другое дело, что кэширование на стороне веб-сервера будет работать только в случае, когда файлы лежат отдельно от БД. И это хорошо.

Кроме того, ни кто не написал, что, если записи с картинками будут удаляться из БД, случай с бинарным содержимым в БД гораздо удобнее, чем случай с простым URL, т.к. в первом случае абсолютно ничего не надо делать, а во втором случае нужно перед удалением записи удалять файл, на который указывает URL, а потом уже саму запись. В ряде случаев этот вопрос может быть существенным.
Название: MySQL и хранение графических элементов
Отправлено: commander от 02 Июля 2004, 21:18:38
Гость
Примеры пожалуйста.... с реальными показателями сервера...
Название: MySQL и хранение графических элементов
Отправлено: ThE0ReTiC от 02 Июля 2004, 22:44:28
commander
не спорь с больными людьми, поднимающими из небытия топики двухлетней давности...
тема закрыта.