Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стоит ли оптимизировать кэш основанный на HashMap? 
:(
    Опции темы
mgarin
Дата 8.11.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Поясню подробнее...

У меня есть некоторая база объектов (реализация ее для данного вопроса не важна).
Соответственно из нее клиентское приложение получает по ИД объекты, 
и для избежания перенагрузки при постоянном поиске и "доставании" объектов из базы сделан простенький кэш.

Кэш в данном случае - просто некая мапа:
Код
Map<String,MyObject> cache = new HashMap<String,MyObject>();

Соответственно при 1ом получении объекта по ИД он достается из базы и кладется в данную мапу по его ИД (ИД - просто уникальный String).
(Думаю, схема стандартная, но все-таки описал, вдруг и тут есть что-то "неочень")

Теперь о клиентском приложении - он отображает полученные объекты на разных страницах... 
Среднее кол-во страниц может варьироваться от 1 до 50 (больше - маловероятно, но возможно).
Среднее кол-во объектов на странице - от 0 до 1000 (при 1000, впрочем, проекту уже будет писец, так что я бы сказал 500-600 максимум).

Так вот, страницы между собой никак не связаны (как и объекты разных страниц), но все объекты со всех страниц кладутся в единый (тот самый описанный выше) кэш. Т.е. кол-во объектов может варьироваться от 0 до 50000 в кэше.


Теперь, собственно, вопрос:
Стоит ли разделить кэш под каждую страницу отдельно? Или же алгоритмов нахождения элементов в HashMap более чем достаточно для работы на таких размерах?

P.S. Насчет частоты - объекты из кэша могут браться более сотни раз за секунду при отрисовке страницы, т.е. 100 обращений в секунду это вполне нормально.
Может быть и гораздо больше - до 1000-2000, в зависимости от расположения объектов на странице.
PM MAIL WWW ICQ   Вверх
COVD
Дата 8.11.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Стоит ли разделить кэш под каждую страницу отдельно? Или же алгоритмов нахождения элементов в HashMap более чем достаточно для работы на таких размерах?

Время доступа к элементам мапа не зависит от его размера, поэтому разбивать мапы только из этих соображений бессмысленно. При больших размерах вместо HashMap'а можно применить кеш-систему (http://ehcache.org/ и др.). В таком кеше редко востребованные элементы автоматически (есть настройки) удаляются из мапа и сохраняются на локальном диске, а при необходимости восстанавливаются. Память используется более рационально ценой незначительного замедления операций (если требуется обращение к диску).
PM MAIL   Вверх
mgarin
Дата 8.11.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Цитата(COVD @  8.11.2010,  14:04 Найти цитируемый пост)
Время доступа к элементам мапа не зависит от его размера, поэтому разбивать мапы только из этих соображений бессмысленно. При больших размерах вместо HashMap'а можно применить кеш-систему (http://ehcache.org/ и др.). В таком кеше редко востребованные элементы автоматически (есть настройки) удаляются из мапа и сохраняются на локальном диске, а при необходимости восстанавливаются. Память используется более рационально ценой незначительного замедления операций (если требуется обращение к диску). 


Значит, надо пробовать данный инструмент и смотреть будут ли какие изменения
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.