В этой статье мы тестируем, как перколяторные запросы работают в 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 на 100K сохраненных запросов
Средние задержки также растут быстрее на Luwak, когда мы начинаем пакетировать документы.
Чтобы оказать давление на движки, мы добавили несколько параллельных рабочих процессов поиска, которые атакуют движки. Luwak показывает несколько лучшие результаты на 100 документах в пакете, так как Manticore замедляется, но он все еще примерно в 2 раза медленнее.Средние задержки следуют той же схеме: Luwak имеет более высокие задержки, когда документы пакетируются.
100x MUST + 20x NOT на 100K сохраненных запросов
Этот случай сильно ударил по Luwak.
20 шаблонов длиной 4 символа на 5k сохраненных запросов
При проведении тестов мы обнаружили проблему с производительностью (которая еще не исправлена) в Manticore при использовании сохраненных запросов с шаблонами и пакетированными документами. Пропускная способность падает, когда мы добавляем несколько документов в пакет. Luwak, в отличие от предыдущих тестов, показывает плохие результаты в непакетированном режиме, но когда мы пакетируем документы, он немного превосходит Manticore.
При атаке на движки с параллельными рабочими процессами нет явного победителя.
В среднем по задержкам, Luwak в некоторых случаях немного лучше, когда количество рабочих процессов поиска меньше, но различия незначительны.
Заключение
Для сохраненных запросов с несколькими терминами без подстановки, единственный случай, когда Luwak сопоставим с Manticore, это когда он работает в режиме без пакетной обработки. Как только мы начинаем пакетировать документы, Manticore значительно превосходит Luwak по пропускной способности, а средние задержки обычно составляют половину от задержек Luwak.
Сценарий наихудшего случая для Luwak — это когда сохраненные запросы содержат более ста терминов без подстановки. Даже в режиме без пакетной обработки Manticore более чем в 3 раза быстрее, достигая примерно 20x быстрее в случае 10 пакетированных документов. Luwak также имеет чрезвычайно высокие задержки, когда документы пакетируются для сопоставления.
Для сохраненных запросов с терминами с подстановкой нет явного победителя. Luwak работает немного лучше в некоторых случаях. Существует известная ошибка с нашей стороны (фильтры отклонения Bloom не работают как ожидалось), что влияет на производительность. Лучший случай для Luwak был на 20 документах в пакете с одним рабочим процессом поиска, когда он почти в 2 раза быстрее, но в остальных случаях приросты гораздо меньше, или Manticore немного впереди.