Должен ли я сохранять размер хранимых полей в Solr минимальным? - PullRequest
4 голосов
/ 02 августа 2011

Я хочу представить Solr для поиска по сайту.На сайте около 2 миллионов записей.

Существует страница результатов поиска, на которой отображаются некоторые ключевые данные для каждого результата.Я считаю, что данные, необходимые для этой сводной информации, составляют около 1 КБ на результат.

Я мог бы просто проиндексировать поля, необходимые для поиска в Solr, но это означает отдельный вызов базы данных для каждого результата для заполнения сводной информации.Если бы Solr мог вернуть все эти данные, я ожидал бы, что он даст более высокую производительность, чем ~ 40 циклических обращений к базе данных.

Проблема заключается в том, что использование памяти Solr будет слишком большим (как я могу рассчитать это?)эта индексация может занять слишком много времени с дополнительными данными.

Ответы [ 2 ]

7 голосов
/ 02 августа 2011

Вам было бы очень полезно хранить эти поля в Solr, по сравнению с обходами в 40 дБ. Просто убедитесь, что вы отметили поле как «не проиндексированное» (indexed = false) в вашей конфигурации схемы и, возможно, также сжато (сжато = true) (однако это, конечно, будет использовать некоторый процессор при индексации и получении).

При пометке поля как "не проиндексированного" никакие анализаторы не будут обрабатывать поле при индексации, что делает его сохраненным намного быстрее, чем индексированное поле.

3 голосов
/ 03 августа 2011

Это компромисс, и вам придется проанализировать это самостоятельно.

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

Размер документа также влияет на размер индекса и время репликации. Для больших индексов с конфигурациями master-slave это может повлиять на скорость обновления индекса.

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

Существует третий вариант, который вы не упомянули, - хранить документы вне БД, но не в Solr. Они должны храниться в формате, максимально приближенном к тому, что вы предоставляете с результатами поиска. Код, который создает / обновляет индексы, может также создавать / обновлять эти документы. Это большая работа, но, как и все, все зависит от того, сколько производительности вам нужно и что вы готовы сделать, чтобы получить ее.

РЕДАКТИРОВАТЬ: для измерения частоты обращений к кешу и пропускной способности, я обнаружил, что лучшим источником теста являются ваши текущие журналы запросов. Возьмите живые запросы на день или два и выполните их для разных индексов и конфигураций, чтобы увидеть, насколько хорошо они работают.

...