Хибернейт и большие файлы
От: ke_passa  
Дата: 26.11.07 13:08
Оценка:
Стало вдруг интересно как хибернейт справляется с отправкой в базу данных больших файлов.
Предположим есть таблица. В ней БЛОБ-поле. И в некую запись этой таблицы мне надо записать 10метровый файл.
Каковы мои действия ? Как описать POJO ? Как описать hbm.xml (или аннотации) ? Какие "особые" действия надо еще будет выполнить ?

вопрос актуален для MSSQL и ORACLE.
Re: Хибернейт и большие файлы
От: ke_passa  
Дата: 27.11.07 14:39
Оценка:
неужели все юзают хибернейт лишь для тестов и что бы "посмотреть", а для реальных задач никто не юзает ? Или же все предпочитают хранить большие файлы на файловой системе, а не в БД ?
Re: Хибернейт и большие файлы
От: C0s Россия  
Дата: 27.11.07 14:58
Оценка:
Здравствуйте, ke_passa, Вы писали:

_>Стало вдруг интересно как хибернейт справляется с отправкой в базу данных больших файлов.


я бы даже не стал рассматривать использование hibernate'а для этого
например, прямой jdbc с использованием потоков для переписывания содержимого блоба выглядит поперспективнее
Re[2]: Хибернейт и большие файлы
От: ke_passa  
Дата: 27.11.07 15:20
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>я бы даже не стал рассматривать использование hibernate'а для этого

C0s>например, прямой jdbc с использованием потоков для переписывания содержимого блоба выглядит поперспективнее

Я подозреваю, что без особой необходимости большие файлы в базу редко кладут
Re[3]: Хибернейт и большие файлы
От: C0s Россия  
Дата: 27.11.07 15:35
Оценка:
Здравствуйте, ke_passa, Вы писали:

_>Я подозреваю, что без особой необходимости большие файлы в базу редко кладут


именно ... а уж какой необходимостью должно быть ещё и использование для этого hibernate мне даже сложно представить
в том-то и дело, что небольшие объекты легко отражать в блобы через промежуточные byte[] (либо сразу можно иметь byte[] если идёт речь об абстрактных файлах), но для больших это неприемлемо, т.к. недружественно по отношению к памяти
Re: Хибернейт и большие файлы
От: weirdo  
Дата: 28.11.07 11:06
Оценка:
В случае файлов с размером 10 мегабайт, думаю, можно использовать хибернейтовский блоб (Hibernate.createBlob(byte[]) или Hibernate.createBlob(InputStream)). В бине дожны присутствовать также геттеры и сеттеры для блоба (или acess=field в маппинге) и геттер на InputStream возвращаемый блобом.
blob.getBinaryStream();

Соответственно в маппинге можно писать что-то типа <property name="file"><column name="FILE" sql-type="BLOB" /></property>

В MSSQL image хранятся в виде кучи мелких элементов по 8к каждая, поэтому при передаче весь блоб в память не загружается (если, конечно, вы не конвертнули файл в byte[], а использовали InputStream), про Oracle не знаю, но проверить вполне возможно
Re[4]: Хибернейт и большие файлы
От: weirdo  
Дата: 28.11.07 11:13
Оценка:
Вот пример такой необходимости: необходимость бекапа + возможность использования программой внешней базы данных.

То есть вы точно не знаете какая база данных будет использоваться (чистый jdbc никто не отменял, однако тогда нужно включать ещё обработку диалектов, кроме того остальное приложение использует hibernate)

Также есть требование бекапа. В случае с внешней базой данных бекап выглядит как бекап этой самой базы данных, приложение в нём не участвует. Однако файлы в этом случае теряются
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.