Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизХраниение картинок/фотографий в базе. Найти похожие ветки
← →
Дмитрий С © (2010-03-08 15:05) [0]В полях типа blob.
Применил на одном из проектов, т.к. хостер предоставляет безлимитный размер базы.
А теперь хочется выяснить плюсы/минусы этого факта. Стоит или нет применять?
Ваше мнение.
← →
Piter © (2010-03-08 15:08) [1]уже обсуждалось, пофигу абсолютно.
Единственный минус - поскольку физически отдельного файла-картинки на диске нету, то к нему нельзя применить функции, которые обрабатывают файлы, в том числе из OS API
← →
Anatoly Podgoretsky © (2010-03-08 15:11) [2]> Piter (08.03.2010 15:08:01) [1]
А плюс, поскольку физически отдельного файла-картинки на диске нету, то его нельзя уничтожить.
← →
Kerk © (2010-03-08 15:13) [3]В базе доступ контролировать проще
← →
antonn © (2010-03-08 16:48) [4]Ятобы отдать файл (статику) вебсерверу не нужно передавать управление расширениям, врубать парсер и тягать из базы такие объемы
← →
Anatoly Podgoretsky © (2010-03-08 16:54) [5]> antonn (08.03.2010 16:48:04) [4]
Но файл должен быть доступен физически, что снижает безопасность.
← →
Дмитрий С © (2010-03-08 17:22) [6]А частичную загрузку поля осуществить сложно?
К примеру в поле `data` (largeblob) храниться 10 Мб.
Если я сделаю что-то вроде:
SELECT SUBSTR(`data`, 5*1024*1024, 102400) FROM ....
Сервер поймет, что не нужно грузить в свою память все поле `data`, а извлечь только 100кб из середины?
И еще вопрос: обновить частично поле можно?
← →
Kerk © (2010-03-08 17:40) [7]Если речь только о вебе, то конечно лучше просто статику раздавать
← →
antonn © (2010-03-08 17:46) [8]
> Anatoly Podgoretsky © (08.03.10 16:54) [5]
автор не говорил про безопасность
Но задав такой вопрос на форуме вебдевелоперов (в нулевом посте вроде хостер - вебсервер и сайт?), те просто покрутят пальцем у виска :)
← →
DVM © (2010-03-08 17:55) [9]Лично я не вижу ничего особенного в таком способе хранения картинок. Если размер БД для движка СУБД не проблема, то непонятно что пугает людей.
В конце концов БД это тоже файл. Файловая система тоже в каком то смысле БД. Какая разница читает этот файл драйвер файловой системы или драйвер на пару с движком СУБД. Хранение данных в СУБД дает массу преимуществ.
← →
Eraser © (2010-03-08 18:47) [10]> [9] DVM © (08.03.10 17:55)
хранить картинки в БД - это зло, особенно на посещаемых порталах. либо нужно городить сложный механизм кэширования, который будет накладывать свои ограничения.
← →
antonn © (2010-03-08 19:55) [11]
> В конце концов БД это тоже файл. Файловая система тоже в
> каком то смысле БД. Какая разница читает этот файл драйвер
> файловой системы или драйвер на пару с движком СУБД. Хранение
> данных в СУБД дает массу преимуществ.
>
в разрезе сайтостроя оптимально отдавать картинки простым чтением с диска, а не заставляя драйвер БД читать с диска, выделять данные, передавать клиенту, и потом еще клиент оих сам отдает юзеру.
Какие "масса" преимущества есть в хранении файла в БД окромя того что доступ к нему ограниченный?
← →
Anatoly Podgoretsky © (2010-03-08 20:11) [12]> antonn (08.03.2010 19:55:11) [11]
У меня отдача картинок на
страницу потоком, а не
файлом, соответственно мне
удобнее из базы.
← →
antonn © (2010-03-08 20:45) [13]
> Anatoly Podgoretsky © (08.03.10 20:11) [12]
На страницу картинка не льется, браузер отдельным коннектом запрашивает ее у вебсервера. Что лучше - самому вебсерверу отдать ее с диска, или передать управление пхп/asp, чтобы тот законнектился к базе, сделал запросик, получил данные, сформировал заголовок и отдал клиенту?
← →
Anatoly Podgoretsky © (2010-03-08 22:12) [14]> antonn (08.03.2010 20:45:13) [13]
Ничего у меня не запрашивает, а передается потоком в составе страницы.
--
← →
antonn © (2010-03-08 22:17) [15]=)
вот это http://www.podgoretsky.com/images/logo.png (да, вот так прям и щелкнуть) тоже в составе какой то страницы передается? :)
я начинаю уже разачаровываться...
← →
Anatoly Podgoretsky © (2010-03-08 22:20) [16]> antonn (08.03.2010 22:17:15) [15]
К моему сайту это не относится, тут голый ASP
Механизм применяется у меня в Интранет, в кадровой системе
← →
antonn © (2010-03-08 22:25) [17]Я речь вел про web. Если уж на то пошло я сам отправляю потоком все данные (и xml, и картинки/архивы) которые на клиенте разбираются, однако это совсем не веб и собственные костыли, мало кого интересует.
← →
Anatoly Podgoretsky © (2010-03-08 22:37) [18]> antonn (08.03.2010 22:25:17) [17]
Чистый ВЕБ поток в Content, в соответствии с MIME
--
← →
DVM © (2010-03-08 22:38) [19]
> Eraser © (08.03.10 18:47) [10]
> antonn © (08.03.10 19:55) [11]
Об оптимальности и производительности решения речь не шла. Это другой вопрос. Хотя для множества мелких картинок производительность варианта с базой может оказаться даже выше имхо. В этом случае заброс к базе для получения списка картинок и последующий поиск их по отдельности на диске может оказаться медленнее, чем сразу запрос и получение их из базы скопом.
← →
antonn © (2010-03-08 22:43) [20]
> В этом случае заброс к базе для получения списка картинок
> и последующий поиск их по отдельности на диске может оказаться
> медленнее, чем сразу запрос и получение их из базы скопом.
>
Это очень специфичная задача - получить разом в одном коннекте кучу мелких картинок. Кроме как для варианта "прислать мне архивированные картинки" я не представляю зачем оно нужно.
← →
DVM © (2010-03-08 22:48) [21]
> antonn © (08.03.10 22:43) [20]
> Это очень специфичная задача - получить разом в одном коннекте
> кучу мелких картинок.
Анимация и видео, кадры лежат в базе. Тип контента multipart/x-mixed-replace
← →
wicked © (2010-03-09 23:30) [22]раньше, пару лет назад, я был сторонником хранения файлов в базе
1 - контролировать проще,
2 - аттрибутов на файл можно налепить каких-угодно
но, как только мы начали делать посещаемые и нагруженные сайты, сразу стало ясно, какое решение правильное - отдавать картинки и прочий контент из файловой системы
преимущества простые:
1 - поскольку файл отдает вебсервер (апач), то он допишет ей все нужные заголовки - cache-control, mime-type, expires, Etag и т. д.
2 - из п. 1 следует - правильная отработка запросов HEAD, при правильной настройке апача
3 - из п. 2 следует - правильные клиенты, получив 304, большинство статики будут кешировать у себя
4 - уже реализованная в сервере поддержка докачки файлов
5 - если пхп запущен НЕ как модуль апача, то и ресурсов на отдачу файла тратится намного меньше - сервер в состоянии отстреливаться такими файлами со скоростью несколько тысяч шт в секунду даже на сравнительно скромном железе
а если кому-то нужно защищать/ограничивать доступ к файлу, это отлично делается с помощью mod_rewrite (на апаче)
← →
Piter © (2010-03-10 01:07) [23]wicked © (09.03.10 23:30) [22]
1 - поскольку файл отдает вебсервер (апач), то он допишет ей все нужные заголовки - cache-control, mime-type, expires, Etag и т. д.
ну это, видимо, не очень у вас и нагруженные )) Обычно ставят заслонку в виде nginx и вот он уже статику отдает великолепно, а на динамику подключает апач.
← →
antonn © (2010-03-10 01:13) [24]
>
> ну это, видимо, не очень у вас и нагруженные )) Обычно ставят
> заслонку в виде nginx и вот он уже статику отдает великолепно,
> а на динамику подключает апач.
а ngix типа не делает тоже самое? :)
← →
GDI+ (2010-03-10 05:38) [25]
> Дмитрий С © (08.03.10 15:05)
>
> В полях типа blob.
> Применил на одном из проектов, т.к. хостер предоставляет
> безлимитный размер базы.
> А теперь хочется выяснить плюсы/минусы этого факта. Стоит
> или нет применять?
> Ваше мнение.
Удобно если база для десктопа(не веб) + хороший канал к серверу или локальное приложение. Особого падения скорости при чтении данных не будет (а если картинки мелкие, то может даже возрасти), при записи да.
← →
Ega23 © (2010-03-10 06:42) [26]я в базе всегда хранил.
← →
Дмитрий С © (2010-03-11 08:41) [27]Все совсем не так как мне казалось на первый взгляд. Хорошо что спросил.
Еще такой "религиозный" вопрос:
Есть таблица пользователей. Тысяч 6 будет точно. Поле `name`
Нужен индекс для быстрого поиска. Сильно большой индекс делать не хочется, а имена пользователей в основной своей массе имеют одинаковое начало (имя домена):
domain\ivanov
domain\petrov
domain\sidrov
Я добавил еще одно поле `name_crc` INT где храню CRC32 строки имени. На него повесил индекс. Поиск осуществляю так:
SELECT * FROM `user` WHERE `name`=?%0 AND `name_crc`=CRC32(UPPER(?%0))
Как бы сделали вы?
← →
Ega23 © (2010-03-11 10:24) [28]
> Как бы сделали вы?
ИМХО, лишний геморрой. Общее решение зависит от реализации индексов в конкретной СУБД. Для MSSQL я бы точно не заморачивался.
← →
Mystic © (2010-03-11 10:53) [29]
> Есть таблица пользователей. Тысяч 6 будет точно
Ну и смотрим, 6 000 пользователей, пусть 100 байт на name, получается что 600 kb. Закешируется эта таблица в памяти при большой нагрузке со всеми индексами.
← →
Дмитрий С © (2010-03-11 10:53) [30]
> Ega23 © (11.03.10 10:24) [28]
mysql...
А что в mssql особенного?
← →
Anatoly Podgoretsky © (2010-03-11 10:53) [31]> Дмитрий С (11.03.2010 08:41:27) [27]
Что за странная база такая? Синтаксис какой то странный, не базовый ?%0
Видимо и с индексами в ней тоже странно
← →
Дмитрий С © (2010-03-11 10:59) [32]
> Что за странная база такая? Синтаксис какой то странный,
> не базовый ?%0
А это мое. ?%0 - заменится на имя пользователя.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.065 c