| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Стоит ли оптимизировать кэш основанный на HashMap? |
| Автор: mgarin 8.11.2010, 13:07 | ||
| Поясню подробнее... У меня есть некоторая база объектов (реализация ее для данного вопроса не важна). Соответственно из нее клиентское приложение получает по ИД объекты, и для избежания перенагрузки при постоянном поиске и "доставании" объектов из базы сделан простенький кэш. Кэш в данном случае - просто некая мапа:
Соответственно при 1ом получении объекта по ИД он достается из базы и кладется в данную мапу по его ИД (ИД - просто уникальный String). (Думаю, схема стандартная, но все-таки описал, вдруг и тут есть что-то "неочень") Теперь о клиентском приложении - он отображает полученные объекты на разных страницах... Среднее кол-во страниц может варьироваться от 1 до 50 (больше - маловероятно, но возможно). Среднее кол-во объектов на странице - от 0 до 1000 (при 1000, впрочем, проекту уже будет писец, так что я бы сказал 500-600 максимум). Так вот, страницы между собой никак не связаны (как и объекты разных страниц), но все объекты со всех страниц кладутся в единый (тот самый описанный выше) кэш. Т.е. кол-во объектов может варьироваться от 0 до 50000 в кэше. Теперь, собственно, вопрос: Стоит ли разделить кэш под каждую страницу отдельно? Или же алгоритмов нахождения элементов в HashMap более чем достаточно для работы на таких размерах? P.S. Насчет частоты - объекты из кэша могут браться более сотни раз за секунду при отрисовке страницы, т.е. 100 обращений в секунду это вполне нормально. Может быть и гораздо больше - до 1000-2000, в зависимости от расположения объектов на странице. |
| Автор: COVD 8.11.2010, 14:04 | ||
Время доступа к элементам мапа не зависит от его размера, поэтому разбивать мапы только из этих соображений бессмысленно. При больших размерах вместо HashMap'а можно применить кеш-систему (http://ehcache.org/ и др.). В таком кеше редко востребованные элементы автоматически (есть настройки) удаляются из мапа и сохраняются на локальном диске, а при необходимости восстанавливаются. Память используется более рационально ценой незначительного замедления операций (если требуется обращение к диску). |