Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1271845238
bss
2010-04-21 14:20
2010.08.27
XMLSpy, построение расширения (extension)


15-1275030405
Rembo
2010-05-28 11:06
2010.08.27
При 500 Internal Server Error idHTTP не читает страницу


2-1270973363
@!!ex
2010-04-11 12:09
2010.08.27
Одновременная компиляции проекта в два exe.


11-1216809601
Dy1
2008-07-23 14:40
2010.08.27
утечки памяти. Помогите, пожалуйста


2-1265698658
И. Павел
2010-02-09 09:57
2010.08.27
Вылетает окно "Система выполнила недопустимую операцию..."





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский