⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

Benchmark: Manticore 3 vs Sphinx 3 - now even faster

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

TL;DR

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

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

Test environment

Как ранее, когда мы сравнивали Manticore 2.7 и Sphinx 3 , мы проведём бенчмарк на наборе данных из 11,6 млн пользовательских комментариев Hacker News.

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

  • Набор отобранных комментариев Hacker News 2016 года в формате CSV
  • ОС: Ubuntu 18.04.1 LTS (Bionic Beaver), ядро: 4.15.0-47-generic
  • CPU: 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
}

Indexation

Индексация заняла 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 %.

Performance tests


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

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

Test 1 - time to process top 1000 terms from the collection

Для начала просто проведём простой тест — сколько времени занимает поиск документов, содержащих топ‑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 %.

Test 2 - top 1000 frequent terms from the collection broken down by groups (top 1-50, top 50-100 etc.)

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

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

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


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

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

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

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


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

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

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


Здесь 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 класс ненавидеть недавний
его aren избегатьчерез количество работ эффектпереключить facebook офис абсолютно английский


Пропускная способность Manticore выше на 77,6%, а задержка 95‑го процентиля ниже на 81,4%.

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

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


Пропускная способность - выше на 66,6%, задержка 95‑го процентиля - ниже на 57%.

Выводы

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

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

Если у вас возникнут какие‑либо проблемы, вопросы или комментарии, пожалуйста, свяжитесь с нами:

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

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