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

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

 Вход 

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


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

СообщениеИюн 02, 2011 10:51 
Ответить с цитатой
Eps, спасибо. Идея с сохранением информации об объектах в памяти ясна. Допустим у каждого объекта есть уникальный идентификатор, его можно использовать как ключ в карте, он же и будет искомой информацией об объекте при его поиске.

Ddrad, рад буду помочь когда что нибудь толковое наработаю, пока что сам кучу непоняток пытаюсь преодолеть. Предлагаю, пока что объедиить усилия и разработать наиболее рациональный алгоритм - если уж эта тема на форуме настолько долгоиграющая, пусть здесь останутся наработки коллективного разума об алгоритме, а не просто ссылка на чью то реализацию, которая со временем и вовсе протухает.

Мои мысли следующие (парни, надеюсь на конструктивную критику):

1.решил взять за основу класс производный от LinkedHashMap. Помимо всех очевидных факторов в пользу его, он еще и умеет сам определять, какой из элементов является последним, и, если не ошибаюсь, при каждом обращении к набору перестраивает элементы в прядке обращения к ним. Таким образом отпадает необходимость реализовывать атрибут время_обращения_к_записи.

2.Каждый кэшируемый объект должен обладать UID, который станет ключом в карте. Выбор атрибута объекта для использования в качестве ключа - на вкус каждого. Суть использования данного ключа в качестве информации о сериализованном объекте следующая:
- кэш первого уровня заполняется парами ключ-значение(значением естественно является наш объект) на глубину равную размеру первого уровня, как только этот размер превышается, объекты из первого уровня переносятся во второй, на первом уровне значение элемента обнуляется, но сохраняется его ключ. Таким образом при попадании в кэш, если значение для данного ключа нулевое, это будет сигналом того что объект расположен на втором уровне. И включается алгоритм работы со вторым уровнем - эта часть для меня пока что полна сомнений, т.к..

3. ..т.к. при попадании в кэш второго уровня, данный объект нужно переместить в область MRU, которая является первым уровнем кэша, и наоборот, один из элементов первого уровня, должен будет сместиться во второй.. единственная моя мысль - слить объекты обоих уровней в одну коллекцию (локальную копию, скорее всего такой же линкедхешмеп), произвести обращение (при этом объекты перестроятся), и затем заново залить их на первый уровень (это метод первоначального заполнения кэша, самые старые из объектов при этом "уйдут" на второй уровень). Что мне тут не нравится, так это копирование всех объектов в локальную копию и обратно. Может у кого появится идея получше?

Пока все. Жду разноса, поправок, дополнений.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 2 из 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