Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > file cache system for Java


Автор: Sleepy_PIP 24.8.2010, 18:50
Доброго времени суток!
Помню вроде-бы обсуждалась проблемма систем кеширования вообще и файлового кеширования в данной конференции, но не нашел поиском. Так что если не прав - прошу модераторов извинить!

Проблемма стоит в создании файлового кеша для алгоритмов на java. все вроде просто но это не так.
ну первое - произвел опять обзор систем имеющих отношение к кешированию информации для java.
тут наверное наиболее удобно все собрано:
http://java-sources.org/open-source/cache-solutions

что характерно - ничего подобного на именно специализированный именно файловый кеш не наблюдается в инете.

начал пока медленно соображать как-ж заточить имеющееся для именно файлового кеширования. и понял что пока никак не понимаю пути решения проблеммы.
Ну для начала остановился на JCS
http://jakarta.apache.org/jcs/

системка (если она рабочая) - как раз то что мне и надо - и в памяти кешит и может при ее недостатке использовать доп. регионы которые физически могут являться местом на отдельном диске.
а вот что дальше?
JCS по большому счету (как и прочие) работает с объектами, тоесть кеширование именно объектное. очень хорошо что расчитано и на многопоточность.
Файловый интерфейс хочется аналогичный java.io. тоесть и последовательный и произвольный доступ.
И вот тут то я и просел. что собственно то кешировать? - ну первое что приходит в мозги - блоки. причем наверное они должны для начала быть одинакового размера. да оверхед по использованию ресурсов, зато быстрее.
Далее начинаем соображать - файл как сущность должен чем-то описываться, и к этой сущности надо цеплять список блоков этого самого файла, и часть блоков может быть закеширована (т.е. как объект сохранена с использованием JCS в кеше).
Но при этом - 
1. никак не решу что должно служить индексом-ключем однозначно идентифицирущим объект в кеше при доступе к конкретному файлу  (к конкретному его байту).
2. никак не пойму - что - все интерфейсы java.io прийдется фактически переписать? (ну нужные ), т.е. фактически построить не надстройку а полностъю с боку новую систему работы с файлами?

тоесть пока получается не представляю толком переход от уровня файла (как совокупности байтиков имеющих нечто общее) к сущности объект, хранящийся в собствено объектном кеше ...

1.как-бы Вы подошли к решению подобной проблеммы?
2. а может быть есть таки файловые кеш-системф для java? 
3. а с JCS кто нито работал? - оно действительно рабочее?

строить самостоятельную хорошую систему кеширования честно говоря слабо да и не входит в планы ...

Спасибо!


Автор: COVD 24.8.2010, 22:42
Есть понятие коллекция - List , Map. Они используются для хранения обьектов в памяти. Это уже простейший кеш. 

Системы кеширования, перечисленные в ссылке, это обычно Map +  персистенс, т.е. встроенная возможность сохранения обьектов коллекции в файле, базе данных, или на другом компьютере. Таким образом, редко используемые обьекты или обьекты, срок хранения которых истек, автоматически удаляются из Map'а (т.е. из памяти). Удаляются навсегда или только из памяти и позднее могут быть автоматически восстановлены. Все определяется настройками. 

Работа с кеш системой не отличается от работы с Map (выбор ключей, get , put ..). Обычно необходимо только указать параметры хранилища (если требуется персистенс) и политику удаления\сохранения обьектов. Обьекты должны быть сериалайзабл. 

Автор: Sleepy_PIP 25.8.2010, 10:05
наверное тем кто интересуется данными вопросами будет интересно что раскопал:

http://ehcache.org/documentation/EhcacheUserGuide-1.7.1.pdf

Safety
Thread safe for use by multiple concurrent threads.
Tested formemory leaks. SeeMemoryCacheTest#testMemoryLeak. This test passes for Ehcache
but exploits a number of memory leaks in JCS. JCS will give an OutOfMemory error with a
default 64M in 10 seconds.


интересно - это действительно так? (JCS will give an OutOfMemory error with a
default 64M in 10 seconds.)

Автор: COVD 25.8.2010, 15:58
Конкурентам свойственно постоянно выискивать друг у друга баги. Ehcache -  популярная система.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)