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

Бенчмарк: Manticore 3 vs Sphinx 3 — теперь ещё быстрее

author image
View as markdown

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

TL;DR

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

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

Тестовое окружение

Как ранее, когда мы сравнивали 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
}

Индексация

Индексация заняла 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
aboutgetthinguseddifferenthigh
myworkamoffsystembuild
morethingsseemssuredidnnext
300-350350-400400-450450-500500-550550-600
daysworth20wantedpriceitself
writeservercaresitesgfile
nothingphonestoryrecentlymodelstore
600-650650-700700-750750-800800-850850-900
hiringsmartwelcomechoicetakentopic
clientwishwantspgdetailscore
iphonereasonsenvironmentgenerallycsswondering
900-950950-1000
completekeywords
resourceslate
thoughtsipad


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

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

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

1-5050-100100-150150-200200-250250-300
more bethat beenway beingan offjust startuphad pay
them ascould othercan dthink ownreally elseif design
about wasmake thenwas etcfrom appto littleon yet
300-350350-400400-450450-500500-550550-600
just eithera internetwho netyou locationwill programt basically
not awayby socialt pasta sitesa severalhas co
1 writehas meansmost guysno matterhas spaceif basically
600-650650-700700-750750-800800-850850-900
way programmerssee titlebecause wordsthink macmost expensivetime changed
was difficultme successfulcom customeris heardon extremelybeen food
their weeksthan ycbecause finealso desktopfor understandingmost traffic
900-950950-1000
if partyreally fairly
when serioushere servers
think speedwas lose


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

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

1-5050-100100-150150-200200-250250-300
"they all""think also""that code""we app""from give""by user"
"http you""like been""is our""as article""use made""really least"
"by some""use work""don well""i app""could different""if understand"
300-350350-400400-450450-500500-550550-600
"other developer""by building""want create""there front""any government""them consider"
"has ideas""i python""who given""has completely""has price""ve starting"
"way facebook""be edit""up link""use location""really deal""now early"
600-650650-700700-750750-800800-850850-900
"been weeks""up engineering""has asking""s p""who css""there plus"
"make api""we expect""really willing""t step""because strong""for traffic"
"was note""would themselves""http degree""http desktop""not otherwise""much food"
900-950950-1000
"s bring""very require"
"this choose""all examples"
"now bring""be argument"


Здесь 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 терминов
job self releaseusing thanks second 12switch started b 12 places
every sites missingaround school model linksswitch github class hate recent
his aren avoidthrough jobs amount effectswitch facebook office absolutely english


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

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

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


Пропускная способность — выше на 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 одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

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