Lucene как кеш большого объема? - PullRequest
1 голос
/ 07 февраля 2012

Я работаю с системой, в которой мы много занимаемся пакетной обработкой. У нас есть кэши, которые предварительно загружены, чтобы помочь с производительностью поиска данных. Однако есть сценарии, в которых я не могу кэшировать весь набор данных в память. До этого момента я возвращался к выполнению запроса для поиска данных, которые снижают производительность. В попытке разрешить проблему, я добавил гибридный кеш, где я использую HashMap до порогового значения, а затем перетек в индекс Lucene (локальная файловая система). Это определенное улучшение по сравнению с выполнением запроса (где-то в 6-10 раз быстрее, чем запрос к базе данных). Однако я надеялся на лучшее и задавался вопросом, есть ли лучшие альтернативы для такого рода вещей. Я использую одну строку в качестве ключа и кеширую объекты Java. Я хотел бы придерживаться библиотеки Java, чтобы не усложнять мое развертывание. (Я бы хотел избежать отдельного серверного процесса.) Мне было интересно, использовал ли кто-нибудь еще Lucene для этой цели. Есть ли лучшие альтернативы для этого?

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Существует несколько доступных библиотек кеша, которые могут справиться с вашей ситуацией, записывая записи кеша на диск, если достигнут определенный порог. Хорошая стратегия - записывать записи на диск, которые находятся в аренде. Существуют также кэши, которые распределяют записи кэша по кластеру, сохраняя все в памяти.

Решением кеширования, которое я часто использую, является Infinispan: http://www.jboss.org/infinispan

Это быстрый, простой в использовании, масштабируемый и, безусловно, может решить вашу проблему.

1 голос
/ 10 февраля 2012

Ehcache ! кажется, хорошо подходит для того, что мне нужно. Он работает намного лучше, чем Lucene для этого поиска одного ключа. Он поддерживает переполнение диска и прост в использовании.

1 голос
/ 07 февраля 2012

Я думаю, что если вы используете одну строку в качестве ключа и вам не нужно выполнять запросы к хранимым данным, вы можете использовать Google LevelDB. Имеет хорошую производительность и низкое использование памяти. Проверьте это: http://code.google.com/p/leveldb/

...