Manticore 2.7.5 против Sphinx 3.1.1

Здесь мы тестировали производительность Sphinx 3.0.2 против Manticore 2.6.2. Это было 8 месяцев назад, и с тех пор и Manticore, и Sphinx изменились. Как сказано в объявлении Sphinx 3.0.3 , Sphinx 3.0.3 в два раза быстрее по сравнению с 3.0.2, поэтому интересно провести еще один бенчмарк. На этот раз давайте протестируем на реальном наборе данных - комментариях Hacker News.

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

  • Курированный набор данных комментариев Hacker News 2016 года в формате CSV
  • ОС: 16.04.4 LTS (Xenial Xerus), ядро: 4.15.0-30-generic
  • CPU: Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz, 8 ядер
  • 64G ОЗУ
  • HDD
  • Docker версия 17.05.0-ce, сборка 89658be
  • Базовый образ для индексации и searchd - alpine:3.6
  • Manticore Search был собран там, двоичные файлы 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
}

Индексация

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

Manticore:

indexing index 'full'...
collected 11654429 docs, 6198.6 MB
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6198580642 bytes
total <b>681.732 sec</b>, 9092389 bytes/sec, 17095.30 docs/sec
total 11676 reads, 1.811 sec, 452.6 kb/call avg, 0.1 msec/call avg
total 9431 writes, 4.878 sec, 1065.3 kb/call avg, 0.5 msec/call avg

Sphinx:

using config file '/root/manticore.conf'...
indexing index 'full'...
collected 11654429 docs, 6198.6 MB
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6.199 Gb
total <b>645.7 sec</b>, 9.600 Mb/sec, 18049 docs/sec

Итак, на этом наборе данных и схеме индекса Manticore индексирует медленнее Sphinx на 5,6%.

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


Оба экземпляра были прогреты перед тестированием. Индексы были одного размера и полностью находились в кэше ОС:

Manticore:

snikolaev@dev:~$ sudo ls -lah /var/lib/docker/volumes/4702617c7b0d970ba660514053706125fd88f2a4b7fce7222aab1f53fba2b56d/_data/
total 4.6G
drwx------ 2 root root 4.0K Jan 25 04:50 .
drwxr-xr-x 3 root root 4.0K Jan 25 04:43 ..
-rw-r--r-- 1 root root 362M Jan 25 03:51 idx_full.spa
-rw-r--r-- 1 root root 3.1G Jan 25 03:56 idx_full.spd
-rw-r--r-- 1 root root 27M Jan 25 03:56 idx_full.spe
-rw-r--r-- 1 root root 601 Jan 25 03:56 idx_full.sph
-rw-r--r-- 1 root root 6.3M Jan 25 03:56 idx_full.spi
-rw-r--r-- 1 root root 0 Jan 25 03:51 idx_full.spk
-rw------- 1 root root 0 Jan 25 04:50 idx_full.spl
-rw-r--r-- 1 root root 0 Jan 25 03:51 idx_full.spm
-rw-r--r-- 1 root root 1.1G Jan 25 03:56 idx_full.spp
-rw-r--r-- 1 root root 1 Jan 25 03:56 idx_full.sps
-rw-rw-r-- 1 root root 750 Jan 25 03:27 manticore.conf
lrwxrwxrwx 1 root root 11 Jan 25 03:57 query.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jan 25 03:57 searchd.log -> /dev/stdout
-rw------- 1 root root 2 Jan 25 04:50 searchd.pid
snikolaev@dev:~$ sudo vmtouch /var/lib/docker/volumes/4702617c7b0d970ba660514053706125fd88f2a4b7fce7222aab1f53fba2b56d/_data/
vmtouch: WARNING: not following symbolic link /var/lib/docker/volumes/4702617c7b0d970ba660514053706125fd88f2a4b7fce7222aab1f53fba2b56d/_data/searchd.log
vmtouch: WARNING: not following symbolic link /var/lib/docker/volumes/4702617c7b0d970ba660514053706125fd88f2a4b7fce7222aab1f53fba2b56d/_data/query.log
Files: 12
Directories: 1
Resident Pages: 1190485/1190682 4G/4G 100%
Elapsed: 0.070337 seconds

Sphinx:

snikolaev@dev:~$ sudo ls -lah /var/lib/docker/volumes/0aa7c89baeaa4c1bd2c52d2fbffe6f05fde5f43243534d5725482a702a90fd5b/_data
total 4.6G
drwx------ 3 root root 4.0K Jan 25 04:50 .
drwxr-xr-x 3 root root 4.0K Jan 25 04:43 ..
-rw-r--r-- 1 root root 362M Jan 25 03:37 idx_full.spa
-rw-r--r-- 1 root root 3.1G Jan 25 03:41 idx_full.spd
-rw-r--r-- 1 root root 27M Jan 25 03:41 idx_full.spe
-rw-r--r-- 1 root root 648 Jan 25 03:41 idx_full.sph
-rw-r--r-- 1 root root 6.3M Jan 25 03:41 idx_full.spi
-rw-r--r-- 1 root root 8 Jan 25 03:37 idx_full.spj
-rw-r--r-- 1 root root 1.4M Jan 25 03:37 idx_full.spk
-rw------- 1 root root 0 Jan 25 04:50 idx_full.spl
-rw-r--r-- 1 root root 1.1G Jan 25 03:41 idx_full.spp
-rw-rw-r-- 1 root root 750 Jan 25 03:27 manticore.conf
lrwxrwxrwx 1 root root 11 Jan 25 03:42 query.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jan 25 03:42 searchd.log -> /dev/stdout
-rw------- 1 root root 2 Jan 25 04:50 searchd.pid
drwxr-sr-x 8 root root 4.0K Jan 23 08:01 sphinx-3.1.1
snikolaev@dev:~$ sudo vmtouch /var/lib/docker/volumes/0aa7c89baeaa4c1bd2c52d2fbffe6f05fde5f43243534d5725482a702a90fd5b/_data
vmtouch: WARNING: not following symbolic link /var/lib/docker/volumes/0aa7c89baeaa4c1bd2c52d2fbffe6f05fde5f43243534d5725482a702a90fd5b/_data/searchd.log
vmtouch: WARNING: not following symbolic link /var/lib/docker/volumes/0aa7c89baeaa4c1bd2c52d2fbffe6f05fde5f43243534d5725482a702a90fd5b/_data/query.log
Files: 156
Directories: 18
Resident Pages: 1195648/1210212 4G/4G 98.8%
Elapsed: 0.075835 seconds

Тест 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

Результаты: 32,9 секунды для Sphinx и 28,1 секунды для Manticore. Итак, в этом тесте Manticore Search быстрее Sphinx Search на 16,7%.

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

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


Manticore быстрее Sphinx на 24% по задержке 95-процентиля и на 21% по пропускной способности.

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

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


Снова Manticore быстрее Sphinx на 21% по пропускной способности и на 13% в среднем по задержке 95-процентиля. Хотя для групп 900-950 и 950-1000 Sphinx показал немного лучшую задержку 95-процентиля - на 1,3% и 4,6% соответственно (но все еще хуже по пропускной способности - на 15% и 14% соответственно по сравнению с Manticore Search)

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


В среднем Manticore снова быстрее: на 20% по пропускной способности и на 11% по задержке 95-процентиля. Как и в предыдущем тесте, Sphinx показывает более низкую задержку 95-процентиля для групп 850-900, 900-950 и 950-1000 - на 1,4%, 4,9% и 4,9% соответственно, при этом пропускная способность все еще значительно ниже - на 14-15%.

Тест 5 - 2 термина каждый из группы 600-750 при различных уровнях параллельности

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


Таким образом, Manticore быстрее при всех уровнях параллельности в среднем на 14% и на 17% при параллельности 8, которая обеспечивает максимальную пропускную способность с задержкой 95-процентиля также на 17% ниже.

Выводы

Sphinx показывает немного лучшую производительность индексации.

С точки зрения производительности поиска Manticore 2.7.5 показывает значительно более высокую пропускную способность во всех тестах и значительно более низкую задержку в подавляющем большинстве тестов.

Тест полностью упакован в Docker и открыт в нашем github . Подробные результаты можно найти здесь . Мы будем благодарны, если вы проведете такие же тесты на вашем оборудовании или добавите другие тесты в набор и сообщите нам результаты.

Спасибо за чтение!

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

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