OSCache против EHCache

Никогда раньше не использовал такой кеш. Проблема в том, что я хочу загрузить более 500 000 записей из базы данных и быстро выполнить выбор / фильтрацию.

Думаю использовать кеш, и предварительно нашел EHCache и OSCache, какие мнения?

Как вы думаете, почему использование кеша будет быстрее, чем выбор / фильтрация в базе данных? Вот что они делают. :)

Alex Miller 25.09.2008 22:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
19
1
27 075
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

В основном я использую EhCache, потому что раньше он был поставщиком кеша по умолчанию для Hibernate. На Java-Source.net есть список решений для кеширования.

Раньше у меня была ссылка, по которой сравнивались основные решения для кеширования. Если найду, обновлю этот ответ.

Ответ принят как подходящий

Это оба довольно солидные проекты. Если у вас довольно простые потребности в кешировании, любой из них, вероятно, будет работать так же хорошо, как и другой.

Вы также можете рассмотреть возможность фильтрации запроса к базе данных, если это возможно. Часто использование настроенного запроса, который возвращает меньший набор результатов, дает лучшую производительность, чем загрузка 500 000 строк в память с последующей их фильтрацией.

Это вроде как зависит от ваших потребностей. Если вы выполняете работу с памятью на одной машине, то ehcache будет работать отлично, если у вас достаточно оперативной памяти или достаточно быстрого жесткого диска, чтобы переполнение не приводило к подкачке / перегрузке диска. Если вы обнаружите, что вам нужно добиться масштабируемости, даже несмотря на то, что эта конкретная операция выполняется часто, тогда вы, вероятно, захотите выполнить кластеризацию. JGroups / TreeCache от JBoss поддерживают это, как и EHcache (я думаю), и я знаю, что это определенно работает, если вы используете Ehcache с терракотовым покрытием, что является очень хорошей интеграцией. Этот ответ не говорит напрямую о достоинствах EHcache и OSCache, поэтому вот этот ответ: EHcache, похоже, имеет наибольшую инерцию (раньше это была стандартная, хорошо известная, активная разработка, включая новый сервер кеширования), а OSCache казался (по крайней мере, в одном месте), чтобы иметь немного больше функций, но я думаю, что с вариантами, упомянутыми выше, эти преимущества спорны / отменены. Ах, еще я забыл упомянуть, что транзакционность данных важна, и ваши требования уточнят список допустимых вариантов.

Я использовал JCS (http://jakarta.apache.org/jcs/), и он кажется надежным и простым в использовании программно.

В любом случае я рекомендую использовать их с модулями Spring. Кэш может быть прозрачным для приложения, а его реализации легко менять местами. Помимо OSCache и EHCache, модули Spring также поддерживают кеш Gigaspaces и JBoss.

Что касается сравнений .... OSCache проще настроить EHCache имеет больше параметров конфигурации

Оба они надежны, оба поддерживают зеркальный кеш, оба работают с Terracotta, оба поддерживают кэширование в памяти и на диск.

В других ответах обсуждаются плюсы и минусы кешей; но мне интересно, действительно ли вы получаете выгоду от кеширования. Не совсем ясно, что именно вы планируете здесь делать и почему кеш будет полезен: если у вас есть набор данных для использования, просто откройте его. Кэш только помогает повторно использовать вещи между независимыми в остальном задачами. Если это то, что вы делаете, да, кеширование может помочь. Но если это большая задача, которая может нести свой набор данных, кеширование не принесет никакой пользы.

Судя по их страница релизов, OSCache не поддерживается активно с 2007 года. Это нехорошо. С другой стороны, EhCache находится в постоянном развитии. Только по этой причине я бы выбрал EhCache.

Редактировать ноябрь 2013 г .: OSCache, как и остальная часть OpenSymphony, мертв.

+1 Это очень важный фактор при принятии решения, какое программное обеспечение с открытым исходным кодом использовать.

Richard 18.02.2011 15:19
opensymphony.com OpenSymphony has now publicly announced that they are dead.
Pace 09.06.2011 18:40

Я использовал oscache в нескольких весенних проектах с пружинными модулями, используя конфигурацию на основе aop.

Недавно я попытался использовать модули oscache + spring в проекте Spring 3.x, но обнаружил, что кэширование на основе аннотаций spring-modules не поддерживается (даже вилкой).

Я недавно узнал об этом проекте -

http://code.google.com/p/ehcache-spring-annotations/

Что поддерживает Spring 3.x с декларативным кешированием на основе аннотаций с использованием ehcache.

Выберите кеш, соответствующий JSR 107, что упростит вашу работу, если вы захотите перейти от одной реализации к другой. Чтобы быть конкретным, перейдите к Ehcache, который является более популярным и широко используемым решением для кэширования Java. Мы широко используем Ehcache, и он нам подходит.

OSCache практически мертв, так как был заброшен несколько лет назад. Вы можете взглянуть на Cacheonix, он активно развивается, и мы только что выпустили версию 2.2.2 с поддержкой кэширования на веб-уровне. Я коммиттер, так что вы можете связаться с нами, если у вас возникнут какие-либо вопросы.

Другие вопросы по теме