В этой статье мы тестируем, как запросы перколят работают в Manticore Search и Luwak.
Введение
Недавно мы тестировали производительность запросов перколят в Manticore Search и Elasticsearch . Сегодня мы рассматриваем Luwak, движок сохраненных запросов, основанный на библиотеке поиска Lucene.
Когда мы разрабатывали запросы перколят, мы изучили существующие движки, которые реализуют эту функцию. Бенчмарки, предоставленные Flax (авторы Luwak), выполненные здесь , заставили нас протестировать Manticore против Luwak, так как он превосходил Elasticsearch. В первых тестах мы обнаружили, что Luwak был быстрее нашей реализации, что помогло нам выявить места, которые можно оптимизировать и значительно (в некоторых случаях) улучшить производительность запросов перколят в Manticore Search.
Настройка
Бенчмарки проводились Станиславом Клиновым, одним из старших разработчиков ядра Manticore Search и также давним разработчиком Sphinx Search.
последняя версия Manticore Search
Luwak 1.5.0 с веткой HTTP сервера - https://github.com/tomatolog/luwak/tree/luwak-server
http://github.com/tomatolog/luwak_tests для источника данных и запросов, а также скрипта для отправки запроса демон-через HTTP
http://github.com/Ivinco/stress-tester для запуска бенчмарков
Мы взяли ветку luwak-server и объединили ее с веткой luwak-1.5.0, чтобы получить и HTTP сервер, и последнюю версию Luwak.
В предыдущих тестах с Elasticsearch мы использовали только запросы из 4 слов (2 MUST и 2 NOT). Теперь мы попытались воспроизвести условия бенчмарка , выполненного Luwak (по сравнению с Elasticsearch). Мы искали 3 типа сохраненных запросов:
запросы из 7 слов, 5 из которых MUST и 2 NOT
запросы из 120 слов, 100 из которых MUST и 20 NOT
запросы из 20 подстановочных слов (каждое из которых состоит из 4 символов суффикса)
Наша цель заключалась в том, чтобы выполнить обратные поиски, используя одиночные и пакетные документы. Запросы перколят вызываются либо одним рабочим поиском, либо несколькими рабочими (для тестирования в режиме конкурентности).
Перколят исполнены с использованием HTTP API, по этой причине мы объединили ветку Luwak, содержащую HTTP сервер, с последним стабильным кодом.
Тесты
Luwak показывает немного лучшие результаты, когда мы не используем пакетный режим, но как только мы начинаем пакетировать документы, Manticore выходит вперед.
5x MUST + 2x NOT на 100К сохраненных запросов
Средние задержки также растут быстрее на Luwak, как только мы начинаем пакетировать документы.
Чтобы оказать давление на движки, мы добавили несколько параллельных рабочих поисков, которые обрушивают нагрузку на движки. Luwak показывает хоть и лучшие результаты на пакете из 100 документов, так как Manticore замедляется, но все же он остается примерно в 2 раза медленнее.Средние задержки следуют тому же паттерну: Luwak имеет более высокие задержки, когда документы пакетируются.
100x MUST + 20x NOT на 100К сохраненных запросов
Этот случай сильно ударил по Luwak.
20 подстановочных слов длиной 4 символа на 5к сохраненных запросов
При проведении тестов мы обнаружили проблему с производительностью (которая еще не исправлена) в Manticore при использовании сохраненных запросов с подстановочными символами и пакетированными документами. Пропускная способность падает, когда мы добавляем несколько документов в пакет. Luwak, в отличие от предыдущих тестов, показывает плохие результаты в непакетном режиме, но когда мы пакетируем документы, он немного превосходит Manticore.
При обрушении нагрузки на движки с параллельными рабочими нет четкого победителя.
В среднем по задержкам Luwak в некоторых случаях немного лучше, когда количество рабочих процессов поиска ниже, но различия незначительны.
Заключение
Для сохраненных запросов с несколькими не-диапазонными терминами единственный случай, когда Luwak наравне с Manticore — это когда он работает в неделимом режиме. Как только мы начинаем пакетировать документы, Manticore значительно превосходит Luwak по пропускной способности, и средние задержки, как правило, составляют половину задержек Luwak.
Наихудший сценарий для Luwak — это когда сохраненные запросы содержат более ста не-диапазонных терминов. Даже в неделимом режиме Manticore более чем в 3 раза быстрее, достигая примерно 20x быстрее в случае 10 пакетированных документов. Luwak также имеет чрезвычайно высокие задержки, когда документы пакетируются для сопоставления.
Для сохраненных запросов с диапазонными терминами нет явного победителя. Luwak работает немного лучше в некоторых случаях. У нас есть признанная ошибка (фильтры отклонения Bloom работают не так, как ожидалось), что влияет на производительность. Лучший случай для Luwak был на 20 документов в пакете с работающим одним рабочим процессом поиска, когда он практически в 2 раза быстрее, но в остальных случаях приросты значительно меньше или Manticore немного опережает.