Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Храниение картинок/фотографий в базе.   Найти похожие ветки 

 
Дмитрий С ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.125 c
2-1271244071
Константин
2010-04-14 15:21
2010.08.27
Есть ли в Delphi 7 директива компилятору по обрботке исключений..


4-1238501632
JayMax
2009-03-31 16:13
2010.08.27
Проблема с запуском системного приложения с Delphi


2-1265445748
lewka
2010-02-06 11:42
2010.08.27
Размеры изображения


15-1267488778
Дмитрий
2010-03-02 03:12
2010.08.27
игры на delphi


15-1270033255
pasha_golub
2010-03-31 15:00
2010.08.27
DLL средствами MSVC Express 2008