powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение Images в Oracle и вывод в JSP
21 сообщений из 21, страница 1 из 1
Сохранение Images в Oracle и вывод в JSP
    #34115649
PM123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сохранение Images в Oracle и вывод в JSP
Пожалйста киньте ссылку. Помню что был этот топик,
что то не найду. Наверно день тяжелый.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115698
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему нельзя в файловую систему сохранять картинки и хранить в БД только пути к ним?
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115747
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovА почему нельзя в файловую систему сохранять картинки и хранить в БД только пути к ним?
Например потому что теряется транзакционность.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115766
PM123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
плюс - так требует заказчик
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115869
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PM123Сохранение Images в Oracle и вывод в JSP
Сохранить - пихаешь ее в Blob и записываешь в базу. Можно еще сохранить ее типа и имя файла. Вывести - читаешь Blob в массив байтов, потом примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 byte [] bytes = ...; // image
String fileName = ...; // image name
response.setContentType("application/octet-stream;");
response.setHeader("Content-Disposition", "inline;filename=\"" + fileName + "\"");
response.setContentLength(bytes.length);
OutputStream out = response.getOutputStream();
out.write(bytes);
Вместо "application/octet-stream;" можно ставить тип изображения, например, "image/png"
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115935
PM123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок
Спасибо
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34115936
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmНапример потому что теряется транзакционность.
- ??? (при совместном редактировании картинки что ли?)

PM123плюс - так требует заказчик
- это аргумент. А производительность заказчик не требует? Сколько раз планируется показывать картинку и какого она размера?
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34116006
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov TimmНапример потому что теряется транзакционность.
- ??? (при совместном редактировании картинки что ли?)
Ее в принципе быть не может. File system - вотчина ОС.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34116188
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmЕе в принципе быть не может. File system - вотчина ОС.
- а путь к файлу записаный в БД, вполне может участвовать в транзакциях БД.

- если Вы считаете, что при записи или удалении файла в ФС возникнет сбой, а БД об этом ничего не узнает, то это всего лишь вопрос логики приложения.
Напрмер:
1. начали транзакцию
2. записали файл в ФС
3. проконтролировали размер или целостность записаного файла
4. если что то не так, откатили транзакцию, если все нормально записали путь к файлу и завершили транзакцию

- если Вы беспокоитесь о том, что файл в ФС можно удалить минуя БД, при этом запись о нем в БД останется, то такие рассуждения можно перенести на любые файлы ФС. Например могу через ФС удалить или попортить конфигурационные файлы БД, таблицы если они лежат в отдельных файлах, логические базы и т. п. (для ФС нет ничего святого)
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34116411
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, интересная задача получается - распространить транзакцию до ФС. теоретически ничего сложного нет
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34116840
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov TimmЕе в принципе быть не может. File system - вотчина ОС.
- а путь к файлу записаный в БД, вполне может участвовать в транзакциях БД.

- если Вы считаете, что при записи или удалении файла в ФС возникнет сбой, а БД об этом ничего не узнает, то это всего лишь вопрос логики приложения.
Напрмер:
1. начали транзакцию
2. записали файл в ФС
3. проконтролировали размер или целостность записаного файла
4. если что то не так, откатили транзакцию, если все нормально записали путь к файлу и завершили транзакцию

- если Вы беспокоитесь о том, что файл в ФС можно удалить минуя БД, при этом запись о нем в БД останется, то такие рассуждения можно перенести на любые файлы ФС. Например могу через ФС удалить или попортить конфигурационные файлы БД, таблицы если они лежат в отдельных файлах, логические базы и т. п. (для ФС нет ничего святого)
Мне фиолетово.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117559
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всякий раз, когда обсуждается вопрос о хранении картинок в базе, появляется кто-нибудь с мыслью "а почему бы не хранить имена файлов". Каждый раз отвечать скучно. Я храню в базе.

В Oracle в принципе есть 3 способа:
- хранить полях BFILE (то есть во внешних файлах)
- в полях LONG RAW (устаревший способ). В уже заполненной таблице поле LONG RAW можно преобразовать в BLOB с сохранением данных.
- в полях BLOB (правильный способ). Как писать-читать BLOB в программе на Java - есть в документации по Oracle. Выводить надо не из JSP (которое предназначено для вывода текстовых данных), а из сервлета, вызываемого из JSP (с помощью RequwestDispatcher) или может сохранять в файле, и давать его в <img src=...>.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117642
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MВсякий раз, когда обсуждается вопрос о хранении картинок в базе, появляется кто-нибудь с мыслью "а почему бы не хранить имена файлов". Каждый раз отвечать скучно.
- просто удивительно откуда такая уверенность что картинки надо хранить в базе. Аргумент об участии картинок в транзакциях считаю просто смешным. Я знаю как хранить картинки в базе и как их от туда доставать, но не уверен что это надо делать. Может ли БД+сервлет+контейнер сервлетов обеспечить такое же быстродействие как ФС+Apache ? Картинка, например в каталоге, это ресурс к которому часто обращаются и храня картинки в БД Вы рискуете сильно увеличить нагрузку на машину и заметно потерять в производительности сайта.

Мне приходилось заниматься Java-хостингом и я видел как пишут различные Java-программисты и как это работает (и как работают некоторые популярные среди участников форума технологии - не хочется сейчас обсуждать эту тему). Поверьте, редкий Java-программист способен писать быстро работающие сайты не требовательные к ресурсам. Вообще тема эффективности кода не часто всплывает у web-разработчиков.

По моему хранение картинок в БД это один из антипаттернов web-программирования.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117656
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov Partisan MВсякий раз, когда обсуждается вопрос о хранении картинок в базе, появляется кто-нибудь с мыслью "а почему бы не хранить имена файлов". Каждый раз отвечать скучно.
- просто удивительно откуда такая уверенность что картинки надо хранить в базе. Аргумент об участии картинок в транзакциях считаю просто смешным. Я знаю как хранить картинки в базе и как их от туда доставать, но не уверен что это надо делать. Может ли БД+сервлет+контейнер сервлетов обеспечить такое же быстродействие как ФС+Apache ? Картинка, например в каталоге, это ресурс к которому часто обращаются и храня картинки в БД Вы рискуете сильно увеличить нагрузку на машину и заметно потерять в производительности сайта.

Мне приходилось заниматься Java-хостингом и я видел как пишут различные Java-программисты и как это работает (и как работают некоторые популярные среди участников форума технологии - не хочется сейчас обсуждать эту тему). Поверьте, редкий Java-программист способен писать быстро работающие сайты не требовательные к ресурсам. Вообще тема эффективности кода не часто всплывает у web-разработчиков.

По моему хранение картинок в БД это один из антипаттернов web-программирования.
В такой постановке это неправда. Это может стать плохим решением, а может и не стать. depends on ... как грицца.
Для кого то картинки - это всего лишь картинки . А для кого то - данные .
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117684
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Kachalov

Вот мне недавно то же говорили, а я не (естественно) поверил. Потому что и раньше испытывал хранение в BLOB-ах. А именно - хотели хранить в базе фотографии, не получилось - говорят сервер рухает (они хранили в LONG RAW). Я сам поместил фотографии в BLOB-ы, стал извлекать и измерять расход памяти и скорость записи - получения. Значит, расход памяти увеличился на 1 МБ по сравнению с той же таблицей без картинок. Скорость чтения была где-то 0,015 сек, увеличившись на 0,05 сек (хотя прирост нагрузки был таким маленьким, что эти данные нельзя было точно измерить. Скорость записи и чтения измерял вместе с чтением из файлов и записью в файлы). И ничего не рухает, если делать правильно.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117693
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем то написал. Время чтения 1 записи с BLOB-ом вместе с его сохранением в файле увеличилось с 0,15 до 0,2 сек по сравнением с чтением такой же записи, не содержащей BLOB-а. То есть если хранить в файлах, то к 0,15 надо прибавить время чтения и записи файла (размер 400-500КБайт). Эксперимент проводился на компьютере Pentium-4, 3 ГГц, потом на сервере было гораздо быстрее.
Ну не вижу я чрезмерной нагрузки.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117699
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmЭто может стать плохим решением, а может и не стать. depends on ... как грицца.
- в большинстве случаев применительно к web-программированию это плохое решение. Когда наблюдаешь как жалкий каталог товаров с низкой посещаемостью при выводе списка товаров с картинками (порядка 20 шт на страницу) дает 30% процентов загрузки процессора, начинаешь ненавидеть программистов (обычно это все сопровождается крутыми фреймворками, библиотеками для кэширования объектов и прочей дрянью) которые сотворили такое чудо.

- собственно хотелось бы (честно) услышать разумные аргументы за хранение картинок в БД:

а) удобство хранения (под вопросом в случае необходимости сделать дамп данных)?

б) изображение с которым ведется работа как с двоичными данными (мне кажется, это очень редкий случай, особенно для веба)?

в) участие в транзакциях (эту задачу можно решить и без физического присутствия изображения в БД)?
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117713
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mразмер 400-500КБайт
- это что за картинки? 500Кб картики помещать на сайт - это издевательство над клиентом :)

Partisan MВремя чтения 1 записи с BLOB-ом вместе
- это Вы считали разницу по времени между отпрвкой запроса в БД и получением результата из БД или разницу по времени между запросом к web-серверу и получением от него ответа?

- кстати, какой web-сервер, какая БД, где физически находится БД на той же машине или она разнесена с web-сервером, какая загрузка процессора возникала?
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34117728
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Kachalov

это не сайт, а информационная система предприятия. 400-500 КБайт я взял для эксперимента (нужное количество картинок - несколько тысяч - получил, записывая файлы циклически). Потом оказалось, что в действительности размер картинки 65 КБайт. Но картинки загружались в базу программным средством SQL*Loader, которое дописало в коец маленьких файлов 0-байты. Когда я прочитал картинки из базы и отсёк лишние байты, то картинки в среднем уменьшились в 4 раза. То есть рушить Oracle - надо уметь.

Веб-сервер не использовался. Вся работа через JDBC. При разработке программа (записи-чтения картинок) и Oracle находились на моём компьютере, а затем я со своего компьютера обращался к разным серверам через локальную сеть. Картинки в базе должны просматриваться в приложении Oracle Forms, что конечно заметно снижает скорость получения картинок из базы, но она осталась практически достаточной (не измерял). Oracle Forms - это Java аплеты в IE, а на сервере для них используется OAS.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34118616
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Partisan M
- мне кажется, у Вас как раз один из тех немногих случаев (внутренняя корпоративная система), когда способ хранения картинок не имеет принципиального значения :)

- собственно проблема производительности относится к web-приложениям и возникает при наличии цепочки: контейнер сервлетов + сервлет + БД, которая проигрывает по скорости цепчке: Apache + Файловая Система. Причем за счет кэширования в БД и контейнере сервлетов изначально никакой проблемы с производительностью не видно, но ресурсы машины (процессор, память) жрутся нещадно и при достижении пиков нагрузки случаются серьезные провалы производительности.
...
Рейтинг: 0 / 0
Сохранение Images в Oracle и вывод в JSP
    #34120725
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вижу проблемы. Если хранить картинки в файлах, то веб-сервер будет брать из файлов (по ссылке). А если хранить в BLOB-ах, то возможны 2 варианта
- картинки извлекаются из базы и помещаются во аременные файлы, откуда их берёт веб-сервер. При этом для веб-сервера нет разницы - были картинки в файлах с самого начала или извлечены из BLOB-а. Причём веб-сервер (если нужен), червер приложений и Oracle могут находиться на разных компьютерах и не мешать друг дугу.
- картинки извлекаются из BLOB-а и посылаются клиенту без промежуточного вывода в файл. Этот способ быстрее (в данном случае я не испытывал его скорость. Раньше испытывал - не на Java, но это неважно). Правда, затраты памяти могут возрасти.
Сл., есть варианты выбора один из которых аналогичен (для веб-сервера) хранению в файлах, а значит не может быть хуже, чем хранение в файлах.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение Images в Oracle и вывод в JSP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]