Кэши
В общем, кэширование выглядит хорошей идеей для повышения производительности, но это также имеет много проблем:
- кэшируемые объектыскорее всего, перейдет к старому поколению сборщика мусора, который стоит дороже,
- управление вставками и удалениями добавляет некоторые издержки.
Более того, кэширование вряд ли улучшит вашуЗадержка поиска очень велика, если в ваших запросах нет шаблонов.Напротив, если 20% вашего трафика приходится на несколько запросов, то кеш результатов запросов может быть интересен.Настройка кешей требует, чтобы вы хорошо знали свои запросы и документы.Если вы этого не сделаете, вам, вероятно, следует отключить кэширование.
Даже если вы отключите все кэши, производительность все равно может быть довольно хорошей благодаря кешу ввода-вывода операционной системы.На практике это означает, что если вы снова и снова читаете одну и ту же часть файла, вполне вероятно, что он будет считан с диска только в первый раз, а затем из кэша ввода-вывода.А отключение всех кэшей позволяет вам выделить меньше памяти для JVM, чтобы было больше памяти для кэша ввода-вывода.Если ваша система имеет 12 ГБ памяти и если вы предоставляете 2 ГБ для JVM, это означает, что кэш ввода-вывода может кэшировать до 10 ГБ вашего индекса (в зависимости от того, какие другие приложения работают, и для них тоже требуется память).
Я рекомендую вам прочитать это, чтобы получить больше информации о кеше уровня приложения и о кеше ввода / вывода:
https://www.varnish -cache.org / trac / wiki / ArchitectNotes
http://antirez.com/post/what-is-wrong-with-2006-programming.html
Кэш поля
Размер кэша поля для строки равен (один массив целых чисел длины maxDoc) + (одинмассив для всех уникальных экземпляров строки).Таким образом, если у вас есть индекс с одним строковым полем, которое имеет в среднем N экземпляров размера S, и если ваш индекс имеет M документов, то размер кэша полей для этого поля будет приблизительно M * 4 + N * S
.
* 1033.* Кэш поля в основном используется для фасетов и сортировки.Даже очень короткие строки (менее 10 символов)
превышают 40 байт , это означает, что вы должны ожидать, что Solr потребует много памяти, если вы сортируете или фасете в поле String, которое имеет большое числоуникальные значения.
Нечеткий запрос
FuzzyQuery работает медленно в Lucene 3.x, но намного быстрее в Lucene 4.x.
Это зависит от выбранной вами реализации проверки орфографии, но я думаю, что программа проверки орфографии Solr 3.x использует N-граммы для поиска кандидатов (именно поэтому ему необходим выделенный индекс), а затем вычисляет только расстояния на этом наборе для кандидатов,так что производительность все еще достаточно хорошая.