Использование шардинга с nhibernate.search для разделения индексов
Мы используем NHibernate 3.1 и NHibernate.Search поверх Lucene для полнотекстового поиска. Пока это работает отлично, но у нас есть некоторые проблемы с масштабируемостью:
В нашей базе данных у нас есть данные нескольких разных клиентов - каждый клиент не должен видеть данные друг друга. Пока что мы решили эту проблему с помощью Filters, но проблема в том, что наш индекс растет, и у нас есть проблемы с пессимистической блокировкой, задерживающей запросы.
То, что мы хотели бы сделать, это разделить индекс по каждому клиенту (все объекты имеют свойство с этим customerId), используя функцию сегментирования Lucene.
Кто-нибудь пробовал это в NHibernate Search - это вообще возможно?
1 ответ
Не уверен, каковы настройки вашей базы данных / фабрики сеансов, но вы можете использовать фабрику сеансов, указывающую на разные каталоги индекса для каждого клиента. Если у вас есть только одна БД, это может быть довольно странно, но это будет довольно безболезненно, если ваш подход к поддержке нескольких клиентов в 1 базе данных является разумным.
Если это звучит интересно, взгляните на этот ответ.