memcached или lucene.net с nhibernate - PullRequest
       10

memcached или lucene.net с nhibernate

4 голосов
/ 15 сентября 2009

Кто-нибудь использовал memcached в качестве кеша уровня 2 или lucene.net для поиска с помощью nhibernate? Не могли бы вы поделиться своими достижениями в области кэширования, индексирования и поиска в nhibernate.

И является ли memcached (с помощью enyim cilent на той же машине appserver) самым быстрым решением l2cache с nhibernate?

С наилучшими пожеланиями sirmak

Ответы [ 2 ]

3 голосов
/ 16 сентября 2009

Я использовал оба экспериментально . Что касается кэша второго уровня, я не могу сравнить его с любым другим вариантом, так как он был единственным, который я использовал, за исключением, возможно, его отсутствия: он сразу же увеличит производительность, но он будет более заметным для сценариев, где вы чаще читаете, чем вставляете / обновляете, когда имеете дело с большими наборами данных и когда у вас есть кластер. Специально для memcached это звуковое решение, поскольку приложение может быть запущено практически на любом компьютере (например, на дешевой машине с Linux)

Для Lucene.NET я использовал его как ванильный (хотя не в nhibernate, но на производстве, а только в экспериментах), так и в форме NHibernate.Search, тогда как интеграция с nhibernate бесшовная: индексы создаются и управляются за занавес и все настроено в объявлении Класса (к сожалению, с атрибутами класса и свойства, предпочли бы при отображении). Сравнивая его с полнотекстовой поисковой системой Sql-Server, я думаю, что она более удобна в обслуживании, поскольку вам не нужно писать нормальный SQL для извлечения с использованием FT Engine, вы просто используете механизм Criteria, а также механизм предоставления для запросов Lucene.

Синхронизация с базой данных выполняется автоматически во время обновления / вставки / удаления. Производительность движка Lucene.NET зависит как от конфигурации процессора / оперативной памяти машины, так и от скорости носителя данных, и я считаю, что она сопоставима, если не быстрее, чем FullText Engine SqlServer. Следует отметить, что индексы NHibernate.Search просты, и у каждого индексируемого класса есть собственный индексный файл, облегчающий разработку и просмотр индекса.

2 голосов
/ 15 сентября 2009

Мы успешно использовали Lucene.NET для повышения производительности поиска в большой базе данных размером в несколько ГБ. Затем идентификаторы результатов Lucene.NET передаются в NHibernate для извлечения. Запросы NHibernate истекают, но Lucene.NET возвращает результаты в считанные секунды. Мы не использовали Memcached, поэтому я не могу сравнить оба решения.

Самым большим недостатком является тот факт, что индекс Lucene должен синхронизироваться с реальной базой данных.

Редактировать: Одна вещь, на которую вы, возможно, захотите взглянуть, это NHibernate.Search, если вы собираетесь идти по маршруту Lucene.NET и NHibernate, это проект, который обрабатывает создание и синхронизацию индекса Lucene для вас. У него есть несколько приятных особенностей, в прошлый раз, когда я проверял, он создал индекс для каждого класса, автоматически индексируя все свойства. Для нас это было бесполезно, так как мы также хотели индексировать ссылочные объекты, но в некоторых случаях этого должно быть достаточно. Не знаю, в каком состоянии находится проект, прошло много времени с тех пор, как я посмотрел.

...