[Lucene] Что такое издержки в IndexReader / Searcher - PullRequest
0 голосов
/ 26 октября 2011

Большая часть документации Lucene рекомендует хранить один экземпляр indexReader и повторно использовать его из-за накладных расходов при открытии нового Reader.

Однако мне трудно понять, на чем основаны эти издержки, ичто на это влияет.

это связано с тем, сколько накладных расходов вызывает фактическое открытие открытого IndexReader?

Контекст для этого вопроса: В настоящее время мы запускаем кластерный стек tomcat, в котором мы выполняем полный текстСервлетКонтейнер.Эти поиски выполняются по отдельным индексам Lucene для каждого клиента, поскольку каждый клиент ищет только свои собственные данные.Каждый из этих индексов содержит от нескольких тысяч до (в настоящее время) около 100 000 документов.

Из-за кластеризованных узлов Tomcat любой клиент может подключиться к любому узлу Tomcat.Следовательно, сохранение открытого IndexReader будет означать, что на каждом узле tomcat будет открыто несколько тысяч indexReader.Это кажется плохой идеей, однако постоянное повторное открытие тоже не кажется хорошей идеей.

Хотя я могу несколько изменить способ развертывания Lucene, если он не нужен, я бы предпочел этого не делать.

1 Ответ

0 голосов
/ 27 октября 2011

Обычно полевой кэш - самый медленный компонент Lucene для прогрева, хотя другие вещи, такие как фильтры и указатели сегментов, вносят свой вклад. Конкретное количество, хранящееся в кеше, будет зависеть от вашего использования, особенно с такими вещами, как, например, объем хранимых данных (в отличие от только что проиндексированных).

Вы можете использовать любой инструмент исследования использования памяти, подходящий для вашей среды, чтобы увидеть, сколько Lucene потребляет для вашего приложения, но имейте в виду, что «стоимость прогрева» также относится к различным кэшам, которые ОС и файловая система оставайтесь открытыми, что, вероятно, не появится в top или во всем, что вы используете.

Вы правы, что наличие тысяч индексов не является обычной практикой. Стандартный совет состоит в том, чтобы они разделяли индекс и использовали фильтры, чтобы гарантировать, что соответствующие результаты возвращены.

Поскольку вас интересует производительность, вы должны иметь в виду, что наличие тысяч индексов на сервере приведет к разбросу тысяч файлов по всему диску, что приведет к сотням времени поиска, которое не произойдет, если вы только что был один большой индекс. В зависимости от ваших требований, это может или не может быть проблемой.

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

...