Бенчмарк: 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деталиядро
айфонпричиныокружениев общемcssинтересно
900-950950-1000
завершеноключевые слова
ресурсыпоздно
мыслиайпад


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


Пропускная способность Manticore на 77.6% выше, а 95-й процентильlatency на 81.4% ниже.

ТЕСТ 7: 3 И условия из групп 300-600 и 1 НЕ из 300-400

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


Пропускная способность - на 66.6% выше, 95-й процентильlatency - на 57% ниже.

Выводы

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

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

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

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

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