Бенчмарк: Manticore 3 против Sphinx 3 - теперь еще быстрее

Недавно мы выпустили Manticore 3.0.0 с множеством улучшений, включая новые оптимизации, которые повышают производительность. В этой статье мы хотели бы сравнить производительность новой версии с производительностью Sphinx 3.1.1.

TL;DR

Manticore показывает:

  • примерно в 2 раза более высокую производительность поиска в некоторых случаях, особенно с более длинными запросами
  • и более низкую, но все же лучшую производительность во всех остальных тестах
  • за исключением времени индексации, где Sphinx быстрее на 2%

Тестовая среда

Как и в предыдущий раз, когда мы проводили бенчмарк Manticore 2.7 против Sphinx 3 , мы будем проводить бенчмарк на наборе данных из 11.6M пользовательских комментариев с Hacker News.

Бенчмарк проводился при следующих условиях:

  • Набор данных с курируемыми комментариями Hacker News 2016 года в формате CSV
  • ОС: Ubuntu 18.04.1 LTS (Bionic Beaver), ядро: 4.15.0-47-generic
  • ЦП: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, 8 ядер
  • 32 ГБ ОЗУ
  • HDD
  • Версия Docker 18.09.2
  • Базовый образ для индексации и searchd - Ubuntu:bionic
  • Manticore Search был собран в docker, бинарные файлы Sphinx были загружены с сайта, так как нет открытого исходного кода для сборки
  • stress-tester для бенчмаркинга

Конфигурация идентична для Manticore и Sphinx:

source full
{
  type = csvpipe
  csvpipe_command = cat /root/hacker_news_comments.prepared.csv|grep -v line_number
  csvpipe_attr_uint = story_id
  csvpipe_attr_timestamp = story_time
  csvpipe_field = story_text
  csvpipe_field = story_author
  csvpipe_attr_uint = comment_id
  csvpipe_field = comment_text
  csvpipe_field = comment_author
  csvpipe_attr_uint = comment_ranking
  csvpipe_attr_uint = author_comment_count
  csvpipe_attr_uint = story_comment_count
}

index full
{
  path = /root/idx_full
  source = full
  html_strip = 1
  mlock = 1
}

searchd
{
  listen = 9306:mysql41
  query_log = /root/query.log
  log = /root/searchd.log
  pid_file = /root/searchd.pid
  binlog_path =
  qcache_max_bytes = 0
}

Индексация

Индексация заняла 1263 секунды для Manticore и 1237 секунд для Sphinx:

Manticore:

indexing index 'full'...
collected 11654429 docs, 6198.6 MB
creating lookup: 11654.4 Kdocs, 100.0% done
creating histograms: 11654.4 Kdocs, 100.0% done
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6198580642 bytes
total <b>1263.497 sec</b>, 4905890 bytes/sec, 9223.94 docs/sec
total 22924 reads, 1.484 sec, 238.4 kb/call avg, 0.0 msec/call avg
total 11687 writes, 11.773 sec, 855.1 kb/call avg, 1.0 msec/call avg

Sphinx:

indexing index 'full'...
collected 11654429 docs, 6198.6 MB
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6.199 Gb
total <b>1236.9</b> sec, 5.011 Mb/sec, 9422 docs/sec

Таким образом, на этом наборе данных и схеме индексации Manticore индексирует медленнее, чем Sphinx, примерно на 2%.

Тесты производительности


Обе инстанции были разогреты перед тестированием. Индексные файлы были следующими:

Manticore:

root@bench# ls -lah /var/lib/docker/volumes/64746c338de981014c7c1ea93d4c55f55e13de63ac9e49c2d31292bb239a82b6/_data
total 4.7G
drwx------ 2 root root 4.0K May 14 09:03 .
drwxr-xr-x 3 root root 4.0K May 14 09:01 ..
-rw-r--r-- 1 root root 362M May 13 17:22 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 13 17:31 idx_full.spd
-rw-r--r-- 1 root root  90M May 13 17:31 idx_full.spe
-rw-r--r-- 1 root root  628 May 13 17:31 idx_full.sph
-rw-r--r-- 1 root root  29K May 13 17:22 idx_full.sphi
-rw-r--r-- 1 root root 6.5M May 13 17:31 idx_full.spi
-rw------- 1 root root    0 May 14 09:03 idx_full.spl
-rw-r--r-- 1 root root 1.4M May 13 17:22 idx_full.spm
-rw-r--r-- 1 root root 1.1G May 13 17:31 idx_full.spp
-rw-r--r-- 1 root root  59M May 13 17:22 idx_full.spt

Sphinx:

root@bench /var/lib/docker/volumes # ls -lah /var/lib/docker/volumes/bd28586b5102ff91d4c367f612e2f7b1fe0a066917c8e0b4636d203dd3ba5b0b/_data
total 4.6G
drwx------ 3 root root 4.0K May 14 09:04 .
drwxr-xr-x 3 root root 4.0K May 14 09:03 ..
-rw-r--r-- 1 root root 362M May 13 19:09 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 13 19:17 idx_full.spd
-rw-r--r-- 1 root root  27M May 13 19:17 idx_full.spe
-rw-r--r-- 1 root root  648 May 13 19:17 idx_full.sph
-rw-r--r-- 1 root root 6.3M May 13 19:17 idx_full.spi
-rw-r--r-- 1 root root    8 May 13 19:09 idx_full.spj
-rw-r--r-- 1 root root 1.4M May 13 19:09 idx_full.spk
-rw------- 1 root root    0 May 14 09:04 idx_full.spl
-rw-r--r-- 1 root root 1.1G May 13 19:17 idx_full.spp

Тест 1 - время обработки 1000 лучших терминов из коллекции

Прежде всего, давайте просто проведем простой тест - сколько времени требуется, чтобы найти документы, содержащие 1000 лучших терминов из коллекции:

for n in `head -1000 hn_top.txt|awk '{print $1}'`; do
mysql -P9306 -hhn_$engine -e "select * from full where match('@(comment_text,story_text,comment_author,story_author) $n') limit 10 option max_matches=1000" > /dev/null
done

Результаты: 77.61 секунды для Sphinx и 71.46 секунды для Manticore.

Таким образом, в этом тесте Manticore Search быстрее, чем Sphinx Search на 8,59%.

Тест 2 - 1000 наиболее частых терминов из коллекции, разбитых по группам (топ 1-50, топ 50-100 и т.д.)

Теперь давайте посмотрим, как Sphinx и Manticore отличаются в обработке терминов из подгрупп группы 1000 наиболее частых терминов.

Чтобы лучше понять запросы, вот несколько случайных примеров запросов для каждой из групп:

1-5050-100100-150150-200200-250250-300
ополучитьвещьиспользуетсяразныевысокий
мойработаявыключенсистемастроить
большевещикажетсяувереннеследующий
300-350350-400400-450450-500500-550550-600
днейстоит20хотелценасам
написатьсерверзаботитьсясайтыгфайл
ничеготелефонисториянедавномодельмагазин
600-650650-700700-750750-800800-850850-900
наемумныйдобро пожаловатьвыборвзятотема
клиентжеланиехочетpgдеталиосновной
iphoneпричиныокружениев общемcssразмышляя
900-950950-1000
завершитьключевые слова
ресурсыпоздно
мыслиipad


Manticore быстрее, чем Sphinx на 6,8% по задержке и на 12,2% по пропускной способности.

Тест 3 - топ 1000 частых терминов из коллекции, разбитых по группам + 1 термин из группы 1-100

Давайте посмотрим, как это работает, когда у вас есть один очень частый термин и другой менее частый. Примеры:

1-5050-100100-150150-200200-250250-300
больше бытьчто былоспособ бытьодин выключитьпросто стартапимел платить
их какмогли другиемогут ддумать своидействительно ещеесли дизайн
о былосделать тогдабыло и т.д.из приложенияк маленькомуна еще
300-350350-400400-450450-500500-550550-600
просто либоа интернеткто сетьвы местоположениебудет программат в основном
не прочьпо социальнымт прошлоеа сайтыа несколькоимеет ко
1 писатьимеет средствабольшинство парнейне важноимеет пространствоесли в основном
600-650650-700700-750750-800800-850850-900
способ программистыувидеть заголовокпотому что словадумать максамый дорогойвремя изменилось
было трудноменя успешнымком клиентслышална крайнебыло еда
их неделичем ycпотому что хорошотакже десктопдля пониманиябольшинство трафика
900-950950-1000
если вечеринкадействительно довольно
когда серьезноздесь серверы
думать скоростьбыло потерять


Ух ты, Manticore быстрее Sphinx на 106% по пропускной способности и на 91,8% в среднем по 95p задержке.

Тест 4 - топ 1000 частых терминов из коллекции, разбитых по группам + 1 термин из группы 1-100, оба термина заключены в кавычки, чтобы составить фразу

1-5050-100100-150150-200200-250250-300
"они все""думают также""что код""мы приложение""от дать""пользователем"
"http вы""как было""это наш""как статья""использовать сделано""действительно меньше"
"от некоторых""использовать работу""не хорошо""я приложение""мог бы другой""если понять"
300-350350-400400-450450-500500-550550-600
"другой разработчик""от построения""хотеть создать""там фронт""любое правительство""их рассматривать"
"имеет идеи""я питон""кто дано""имеет полностью""имеет цена""в начале"
"способ facebook""быть редактировать""вверх ссылка""использовать местоположение""действительно сделка""сейчас рано"
600-650650-700700-750750-800800-850850-900
"было недели""вверх инженерия""имеет спрашивать""с п""кто css""там плюс"
"сделать api""мы ожидаем""действительно готовый""т шаг""потому что сильный""для трафика"
"было заметка""были сами""http степень""http десктоп""не иначе""много еды"
900-950950-1000
"с приносить""очень требовать"
"это выбрать""все примеры"
"сейчас приносить""быть аргумент"


Здесь Manticore в среднем быстрее: на 11,8% по пропускной способности и на 21,2% по 95p задержке.

Тест 5 - 2 термина из группы 600-750 при разных конкуренциях

Этот тест направлен на то, чтобы показать разницу в пропускной способности при разных конкуренциях запросов. Вот что мы получаем:



Manticore быстрее при всех конкуренциях в среднем на 31% и дает пропускную способность с 95p задержкой ниже на 28%.

Тест 6 - 3-5 терминов из разных групп

Этот тест направлен на то, чтобы показать разницу в поиске по более длинным запросам (3-5 терминов):

  • 3 термина из групп 100-200 400-500 800-900 соответственно
  • 4 термина из групп 100-200 300-400 500-600 800-900 соответственно
  • 5 терминов из групп 100-200 300-400 500-600 800-900 900-1000 соответственно

Примеры запросов:

3 термина4 термина5 терминов
работа сам выпускиспользуя спасибо второй 12переключить начато b 12 места
каждый сайты отсутствуютвокруг школа модель ссылкипереключить github класс ненавидеть недавний
это избегатьчерез количество работ эффектпереключить facebook офис абсолютно английский


Пропускная способность Manticore на 77.6% выше, а 95p задержка на 81.4% ниже.

ТЕСТ 7: 3 И термина из групп 300-600 и 1 НЕ из 300-400

В этом тесте мы добавляем термин НЕ к запросу из 3 терминов:


Пропускная способность - на 66.6% выше, 95p задержка - на 57% ниже.

Выводы

Sphinx показывает на несколько секунд лучшую производительность индексации за 21 минуту индексации.
Что касается производительности поиска, которая, как мы считаем, гораздо важнее, Manticore 3.0.0 демонстрирует гораздо более высокую пропускную способность и более низкую задержку во всех тестах. Весь тест полностью контейнеризирован и открыт в нашем github . Подробные результаты можно найти здесь . Мы будем признательны, если вы проведете те же тесты на своем оборудовании или добавите другие тесты в набор и сообщите нам результаты.

Если вы думаете о миграции на Manticore 3, пожалуйста, прочитайте эту статью . Мы понимаем, что ваши индексы могут быть большими, и чтобы облегчить процесс миграции, есть новый инструмент index_converter , который может легко конвертировать ваши существующие индексы Sphinx 2 / Manticore 2 в новый формат индекса Manticore 3.

В случае, если у вас есть какие-либо проблемы, вопросы или комментарии, не стесняйтесь обращаться к нам:

Установить Manticore Search

Установить Manticore Search