Изобретение велосипеда? (кеширование blob в фс)
От: Foror http://foror.ru
Дата: 16.05.07 10:50
Оценка:
Есть подобные решения в реализованом виде?

---
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
    }   
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.