Вопрос

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

Я подумываю об использовании кэша, и предварительно нашел Тайник и Оскаш, есть какие-нибудь мнения?

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

Что касается сравнений....OSCache проще настраивать EHCache имеет больше возможностей настройки

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top