Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Двухуровневый кеш
Список форумов
 ->  Коллекции (Java Collection Framework)


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
Polar Wolf : 8
Новичок

СообщениеАпр 21, 2008 16:20 
Ответить с цитатой
Ребята, как организовать с помощью java двухуровневый кеш, первый уровень, чтобы располагался в памяти, а второй на диске? Подскажите какие-нить источники где можно почитать про создание и настройку кеша (я с этим никогда не сталкивался, потому желательно, чтобы было все разложено по полочкам) или дайте какие-нить дельные советы по этой теме.
Заранее благодарен за любую помощь!
К началу Посмотреть профиль Отправить личное сообщение
Marbo : 1179
Java Developer
Откуда: Украина, Одесса

СообщениеАпр 21, 2008 16:42 
Ответить с цитатой
В классе LinkedHashMap<K,V> есть метод removeEldestEntry(Map.Entry<K,V>). Вы можете создать наследника этого класса, переопределить данный метод. Внутри него Вы должны проверять количество элементов карты, в случае, если оно превышает определенное значение, сохранять кэшевые значения на диск, например, посредством сериализации. В случае, если количество элементов превышает общее максимальное значение, старые элементы требуется удалить.
Опишите подробнее, каким образом должен работать кэш.
_________________
Не знала Настя, где зад, где перёд. Показали - разобралась.
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Polar Wolf : 8
Новичок

СообщениеАпр 23, 2008 10:11 
Ответить с цитатой
Необходимо создать конфигурируемый кэш с двумя уровнями (для того, чтобы кэшировать Объекты). Уровень 1 - память, уровень 2 - файловая система. Конфиг параметров должен позволять каждому определять стратегии кэша и максимальные размеры уровня 1 и 2.

Т.е. как я понимаю, необходимо задавать размер кэша не только в количестве элементов, но и в объеме занимаемой памяти, а под стратегией подразумевается срок жизни элементов на обоих уровнях.

Так вот, как с помощью хэш таблиц контролировать объем занимаемой памяти? И возможно ли хранить в Value файлы? Если возможно, было бы неплохо посмотреть простенькие исходники реализующие что-то подобное.
На счет сериализации, разве это оправдано? Ведь при больших обьемах данных она медленно работает. Есть что-то более подходящее под данную задачу?

Если можно поподробней, т.к. я в java новичок, и с кэшем никогда не работал.
К началу Посмотреть профиль Отправить личное сообщение
Vlad : 1670
JavaTalks Team Member
Откуда: ODS-KRK-LON-HFE

СообщениеАпр 23, 2008 13:05 
Ответить с цитатой
За базу реализации такого кэша можно взять класс LRUMap из Apache commons-collections. Этот класс реализует по сути LRU (Least Recently Used) стратегию кэша. В общем советую воспользоваться этим классом.

С размером в байтах будет тяжело, или же Вам потребуется написать метод, кот. будет считать с какой-то погрешностью количество памяти, занимаемое объектом при добавлении его в кэш. Класс LRUMap позволяет задавать максимальный размер кэша в количестве хранимых объектов: после того как кэш полон и нужно добавить новый объект, из кэша удаляется наидавней используемый объект, чтобы освободить место. Можете попробовать переопределить эту логику так, чтобы старый объект не просто удалялся, а переносился в кэш 2-го уровня на диск.

Относительно стандартной сериализации, как по мне, это единственное правильное решение для кэша общего типа (для любых типов объектов). Кроме того этот способ был бы наиболее быстрым, особенно при востановлении объектов со второго уровня кэша, + простой в реализации.
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Ddrad : 16
Новичок

СообщениеМай 17, 2011 12:31 
Ответить с цитатой
Полностью задача звучит так:
"Create a configurable two-level cache (for caching Objects).  Level 1 is memory, level 2 is filesystem.  Config params should let one specify the  cache strategies and max sizes of level  1 and 2."
К началу Посмотреть профиль Отправить личное сообщение
Genua : 4
Новичок

СообщениеМай 31, 2011 17:35 
Ответить с цитатой
Господа, хочу оживить эту тему.

Недавно наткулся на эту самую задачу. Принцип с использованием наследника LinkedHashMap и сериализации ясен, не хватает понимания, как реализовать второй уровень кеша.

..например, при достижении лимита объема второго уровня, нужно заменить определенный объект (согласно стратегии кеширования) на новый - из первого уровня, - если я правильно понимаю. Как это лучше организовать? Загрузить все объекты из файла в память, произвести манипуляции с ними и заново сереализовать (перезаписать весь файл), думаю, не самый рациональный способ. Может кто-нибудь подсказать идею по лучше?
К началу Посмотреть профиль Отправить личное сообщение
Eps : 139
Новичок

СообщениеИюн 01, 2011 8:51 
Ответить с цитатой
Что мешает хранить информацию о них (объектах) в памяти, а сами объекты на диске?
К началу Посмотреть профиль Отправить личное сообщение
Genua : 4
Новичок

СообщениеИюн 01, 2011 9:10 
Ответить с цитатой
Eps, поясните пожалуйста подробнее.
К началу Посмотреть профиль Отправить личное сообщение
Genua : 4
Новичок

СообщениеИюн 01, 2011 10:22 
Ответить с цитатой
Народ,
быть может другого способа и нет? Такой кэш будет мало эффективен и скорее представляет собой академический интерес.
Или может у кого-нибудь есть опыт разработки двухуровневого кэша в производстве?
К началу Посмотреть профиль Отправить личное сообщение
Eps : 139
Новичок

СообщениеИюн 01, 2011 13:13 
Ответить с цитатой
Genua писал(а):
Народ,
быть может другого способа и нет? Такой кэш будет мало эффективен и скорее представляет собой академический интерес.
Или может у кого-нибудь есть опыт разработки двухуровневого кэша в производстве?


http://www.javatalks.ru/sutra116627.php&highlight=#116627
Цитата:
Что мешает хранить информацию о них (объектах) в памяти, а сами объекты на диске?

Создаешь класс "Объект на диске". В нем описываешь полностью объект(дата послед. обращения и т. д.), а сам объект хранишь на диске. Когда надо быстро просмотреть информацию об объектах на диске - смотришь в список объектов класса "Объект на диске".
К началу Посмотреть профиль Отправить личное сообщение
Ddrad : 16
Новичок

СообщениеИюн 01, 2011 14:35 
Ответить с цитатой
Genua если не секрет, можете выложить код который вы еже написали по данной задачи-это просто спортивный интерес, просто в свое время эта задача загнола меня в угол
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4805
Я тут живу!
Откуда: Москва, Россия

СообщениеИюн 01, 2011 15:57 
Ответить с цитатой
Ddrad писал(а):
это просто спортивный интерес


Эта задача предлагается всем, проходящим интервью в одной компании. И уже очень давно.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеИюн 02, 2011 0:05 
Ответить с цитатой
Skipy писал(а):
Ddrad писал(а):
это просто спортивный интерес

Эта задача предлагается всем, проходящим интервью в одной компании. И уже очень давно.

А в другой не предлагается?
_________________
Всякое решение плодит новые проблемы
К началу Посмотреть профиль Отправить личное сообщение
evillive : 810
Постоянный посетитель

СообщениеИюн 02, 2011 0:50 
Ответить с цитатой
Jean писал(а):
Skipy писал(а):
Ddrad писал(а):
это просто спортивный интерес

Эта задача предлагается всем, проходящим интервью в одной компании. И уже очень давно.

А в другой не предлагается?

А в другой - нет. А почему возник такой вопрос?
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4805
Я тут живу!
Откуда: Москва, Россия

СообщениеИюн 02, 2011 9:05 
Ответить с цитатой
Jean писал(а):
А в другой не предлагается?


Может и предлагается. Мне ее как-то присылали из W..., но у меня ощущение, что ее источник - Yandex. Smile
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Коллекции (Java Collection Framework)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru