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