Нет что Вы, я не упорствую. Просто хочется услышать конструктивную критику, а не простое «все у вас упадет».
0) на выходе будет стоять HTTP сервер который и будет заниматься реальной отдачей файлов (так что здесь производительность я не теряю)
1) Какой процент хитов на новости прошлого года? На мой взгляд это не страшно.
2) не понял про что Вы
3) согласен
4) видимо и сейчас не догоняю.
Я знаком с паттернами поэтому не очень переживаю что нужно будет много переделывать (всего лишь подменить два лоадера)
Мне интересно почему Вы так боитесь за «протухший» кэш? Вы же можете оценить вероятность хита по «протухшей» записи? Согласитесь она не велика.
Обязательно, проведу краш тест, но не сейчас. Это не так важно на данный момент.
В общем конструировать этот велосипед я начал из-за того что мне не нравится разносить источники данных. + люблю хот деплой модули которые сами знают что им делать и мне приходится меньше работать ) Не исключаю что в этом случае я ошибаюсь, время покажет.
Как бы то ни было было интересно почитать комментарии.
Ок, начнем с начала. У нас есть таблица с блобом (фалом пользователя). Есть сервлет, которы по запросу (допусти это первый запрос) достане блоб из бд, проведет нужные преобразования, запишет результат на диск. Так же, в кэше появится запись что эта операция уже проводилась и ее результат лежит на диске. В следующий раз когда придет запрос на этот файл с теми же преобразованиями, вернется уже обработаный ранее результат (тот который на диске). Если этот файл стал никому не интересен и он долго ни кем не запрашивался, он удаляется из диска и из кэша. Остается только эталон в БД.
Чем такая схема плоха? Пожалуйста объясните, я видимо чего то не понимаю.
Незнаком с терминами мастер-базой, слейвы но понимаю суть. Но вот что мне непонятно, зачем это мне все? У меня есть БД, есть к ней урл. Настраивай dataSource и все, можно работать. Или я все таки вас не правильно понял?
Про 4, согласен, такой вариант у меня в запасе если что-то пойдет не так.
Про 5 мне непонятно что вам не понятно. При чем тут децентрализованные системы? БД разве не выступает в нашем случае «децентрализованной системой»? Что может быть проще расширяться имея БД и тучу серверов? Может я вас не правильно понял.
Аттачменты из таблиц будут выноситься только по надобности и удаляться по истечению TTL.
Вот смотрите, камень преткновения хранения файлов в БД это скорость и архитектурные «проблемы». Я их решил с помощью такого «фасада». И получил гибкость в управлении этими файлами.
Интересная тема. Я тоже долго сомневался, взвешивал все за и против. Но решил хранить файлы таким образом: все загруженные пользователем файлы храню в блобах. Но показываю файлы из кэша. Т.к. нужно несколько «представлений» файла изображения (превью, с измененными цветовой гаммой, и т.д.) после каждого из этих преобразований результат записывается в файловую систему, и ему выставляется TTL. Таким образом, если этот файл был кому нибудь возвращен и его TTL не закончилось, то вернется версия из кэша(файловой системы). Если нет, выгрузим из БД и положим в кэш, вернем пользователю.
Интересно ваше мнение.
«А зачем ты всегда загоняешь null в переменную, которая и так null? =)
// String host = null;
// String port = null;»
Тут вы ошибаетесь. Конструкция String host; внутри метода (не как параметр класса) даст ошибку при обращении к ней — 'переменная 'host' не инициализирована'
Ничего себе… какой у вас велосипед. Таким не стоит хвастаться. Модели нет, парсинг просто ужас. Представьте на секунду, что структура HTML изменится, придется все переделывать.
HTML это производная XML, а это значит что его можно разпарсить инструментами разработанными для этого. К примеру JDOM.
Практически у всех фильмов можно проследить сюжет и с большой долей вероятности предсказать конец.
Мне аватар понравился в первую очередь стереоэффектами(первый раз был в ЗД) ну и сюжет тоже неплохой. У меня не возникает вопрос «Почему все с ума посходили», на мой взгляд это один из лучших (а то и лучший) голливудский фильм.
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.
0) на выходе будет стоять HTTP сервер который и будет заниматься реальной отдачей файлов (так что здесь производительность я не теряю)
1) Какой процент хитов на новости прошлого года? На мой взгляд это не страшно.
2) не понял про что Вы
3) согласен
4) видимо и сейчас не догоняю.
Я знаком с паттернами поэтому не очень переживаю что нужно будет много переделывать (всего лишь подменить два лоадера)
Мне интересно почему Вы так боитесь за «протухший» кэш? Вы же можете оценить вероятность хита по «протухшей» записи? Согласитесь она не велика.
Обязательно, проведу краш тест, но не сейчас. Это не так важно на данный момент.
В общем конструировать этот велосипед я начал из-за того что мне не нравится разносить источники данных. + люблю хот деплой модули которые сами знают что им делать и мне приходится меньше работать ) Не исключаю что в этом случае я ошибаюсь, время покажет.
Как бы то ни было было интересно почитать комментарии.
Ок, начнем с начала. У нас есть таблица с блобом (фалом пользователя). Есть сервлет, которы по запросу (допусти это первый запрос) достане блоб из бд, проведет нужные преобразования, запишет результат на диск. Так же, в кэше появится запись что эта операция уже проводилась и ее результат лежит на диске. В следующий раз когда придет запрос на этот файл с теми же преобразованиями, вернется уже обработаный ранее результат (тот который на диске). Если этот файл стал никому не интересен и он долго ни кем не запрашивался, он удаляется из диска и из кэша. Остается только эталон в БД.
Чем такая схема плоха? Пожалуйста объясните, я видимо чего то не понимаю.
Про 5 мне непонятно что вам не понятно. При чем тут децентрализованные системы? БД разве не выступает в нашем случае «децентрализованной системой»? Что может быть проще расширяться имея БД и тучу серверов? Может я вас не правильно понял.
Аттачменты из таблиц будут выноситься только по надобности и удаляться по истечению TTL.
Извините, второй вопрос не понял. Все же просто.
Нет, файлы мне зачем? Все автоматически закэшируется.
Почему блобы — пункты 3,4,5.
Интересно ваше мнение.
// String host = null;
// String port = null;»
Тут вы ошибаетесь. Конструкция String host; внутри метода (не как параметр класса) даст ошибку при обращении к ней — 'переменная 'host' не инициализирована'
HTML это производная XML, а это значит что его можно разпарсить инструментами разработанными для этого. К примеру JDOM.
Мне аватар понравился в первую очередь стереоэффектами(первый раз был в ЗД) ну и сюжет тоже неплохой. У меня не возникает вопрос «Почему все с ума посходили», на мой взгляд это один из лучших (а то и лучший) голливудский фильм.
А вы смотрели в 3Д?
JavaDoc