Forum Webscript.Ru
Общие => Базы данных => Тема начата: MadDog от 27 Августа 2002, 08:56:22
-
Интересует такой вопрос. На сколько оправдано (скорость, занимаемый объем, удобство для пользователя и т.п.) хранение графических элементов, например, фотографий и рисунков в базе данных?
Возьмем для примера интернет магазин. Как лучше сделать: хранить фотографии в базе или скидывать их в каталог на сервере?
Некоторые плюсы и минусы для меня очевидны, но хотелось бы узнать и ваше мнение.
-
конечно хранить надо на диске.
При хранении в базе.
скорость - естественно, падает.
объем - тот же. Правда, это если говорить о диске.
а вот оперативная память начинает совершенно на пустом месте тратиться.
удобство для пользователя. Естественно, ему удобнее, когда картинка называется benefon007.jpg, а не pic.php?id=2345&sid=234ERT56DFG5346
удобство для программиста. Меньше сущностей - меньше глюков.
В общем, если, конечно, охота запускать стразу десяток скриптов вместо одного при банальном показе списка товаров одной категории, то, конечно, дело хозяйское...
-
я лично не рискую бинарники хранить в базе... база может упасть итп... да и накладных расходов на фетч больше...
-
MadDog
Ни на сколько.
Если често - еще ни разу не сталкивался с НЕОБХОДИМОСТЬЮ хранить графику в базе.
Всегда хватает хранения ссылок на картинки...
-
Позвольте поделиться своим опытом решения этой проблемы.
По моему мнению хранить ли картинки в базе ли, в каталогах ли не имеет никакого значения по отношению к производительности.
Спрашивал я у компетентных лиц этот вопрос и все хором утверждают что мол база грузится, скорость падает... а ни кто толком не объяснил с чем это конкретно связано.
Если СУБД и Веб-сервер вращаются на одном и той же машине то какая для ней (для машины) разница откуда считывать картинки и куда их потом совать.
С точки зрения процессора, что база что файловая система это всего навсего процессы которые требуют от него куски его времени, то есть что база заставит его читать кучу битов с определенного места, что файловая система заставит его делать то же самое, ему по барабану. Касательно собственно барабана :) (винчестера(ов)) дело обстоит не иначе.
То что действительно влияет на производительность СУБД так это неразумное индексование и количество полей, а то что в этих полях хранится не суть как важно, ведь все равно в самой таблице хранятся лишь заголовки картинок, и пока базе не "скажешь" что б она выбрала эти картинки она с ними делать ничего не станет .
Что касается распределенных систем, то решающую роль конечно же играет то как устроены каналы связи между частями этой системы.
А с точки зрения программирования ничего нет лучше чем хранить картинки в базе... Хотя о вкусах не спорят :)
-
Хм, большое всем спасибо. Буду думать.
-
С точки зрения процессора, что база что файловая система это всего навсего процессы которые требуют от него куски его времени,
О! Я так и знал, что вылезет подобное заявление...
Ты конечно все замечательно расписал. Красиво все так. Внушаеть...
Только видимо ты забыл, что драйвер файловой системы работает в режиме ядра, а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...
Почуствовал разницу, или дальше рассказывать ?
-
а база в пользовательском режиме и работает с данными через тот же драйвер файловой системы...
Так тем более тогда никакой разницы...
-
[OFF]вчера часиков в 9 вечера получаю от своего шефа SMS следующего содержания:
- почему не рекомендуется использовать BLOB в SQL для хранения фоток?
- потому что всегда найдется придурок, который придет и это проиндексирует!
:) LOL [/OFF]
-
rembo
Так тем более разница очевидна...
скрипт->веб-сервер->база->файловый драйвер->база->вывод картинки
скрипт->веб сервер->база->файловый драйвер->база->обработка потока скриптом-> вывод картинки
Почуствовал разницу ?
-
Не, ну мне смешно.
"никакой разницы" - это сильно.
Вместо того, чтобы дать веб-серверу самому отдавать картинку, мы лезем в базу лишний раз, отъедаем память под картинку. получаем в скрипт - отъедаем память под картинку, и... таки вышел опять на Дерибасовскую - толко теперь отдаем в выходной поток веб-сервера.
-
Беру свои слова назад.
Скорость действительно заметно падает когда картинки большие.
До этого я пробовал такую фишку провернуть с картинками в пару сотен байтов и никакой заметной разницы не обнаружил, вот и полез спорить.
-
RomikChef
Во-во. Я о том же...
rembo
А ты не спорь :)
-
По-моему вы тут слегка увлеклись в своих выкладках... БД из-за целого ряда фактов работает намного быстрее, чем вы показали на своих чудо-схемах. Другое дело, что кэширование на стороне веб-сервера будет работать только в случае, когда файлы лежат отдельно от БД. И это хорошо.
Кроме того, ни кто не написал, что, если записи с картинками будут удаляться из БД, случай с бинарным содержимым в БД гораздо удобнее, чем случай с простым URL, т.к. в первом случае абсолютно ничего не надо делать, а во втором случае нужно перед удалением записи удалять файл, на который указывает URL, а потом уже саму запись. В ряде случаев этот вопрос может быть существенным.
-
Гость
Примеры пожалуйста.... с реальными показателями сервера...
-
commander
не спорь с больными людьми, поднимающими из небытия топики двухлетней давности...
тема закрыта.