Есть подобные решения в реализованом виде?
---
BlobProxy
Часто возникает необходимость прикреплять к доменам проекта различные файлы. Это может быть фотография пользователя, приложение к посту или топику, иконки к статьям и т.д.
Для хранения и связывания файла с доменом есть два наиболее простых и популярных варианта. Первый вариант, хранить файлы в файловой системе, а в таблице домена хранить путь на данный файл. Второй вариант, хранить файл в поле типа BLOB в таблице домена. Оба этих варианта имеют свои преимущества и недостатки. Первый вариант усложняет систему, т.к. необходимо поддерживать(делать backup, профилактики и т.д.) два хранилища(база данных и файловая система). Второй вариант имеет одно хранилище, но проигрывает в производительности. Т.к. необходимо держать открытое соединение(а это дорогой ресурс) с базой данных при отдаче файла из базы данных к пользователю(особенно в случае больших файлов).
Нам нужно одно хранилище и в тоже время нам нужна производительность близкая к первому варианту. Для этого нужно разработать кеширование файлов из поля BLOB в файловую систему.
interface BlobProxy {
public File getFile(Object domain);
public File getFile(Object domain, String field);
}
class HibernateBlobProxy implemenets BlobProxy {
public HibernateBlobProxy(Session sess) {
}
public File getFile(Object domain) {
// проверяем кеш на наличие и актуальность файла
// находим первое blob поле в Class of domain
// через sess вытаскиваем объект с blob
// кешируем blob на диск, в файл
// возвращаем File() указывающий на кешированный blob
}
}