Недавно мы выпустили 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-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
об | получить | вещь | используется | разные | высокий |
мои | работа | я | вне | система | создать |
больше | вещи | кажется | уверен | не | следующий |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
дни | стоит | 20 | хотел | цена | сам |
писать | сервер | забота | сайты | г | файл |
ничего | телефон | история | недавно | модель | магазин |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
наем | умный | добро пожаловать | выбор | взято | тема |
клиент | желание | хочет | pg | детали | ядро |
айфон | причины | окружение | в общем | css | интересно |
900-950 | 950-1000 | ||||
завершено | ключевые слова | ||||
ресурсы | поздно | ||||
мысли | айпад |
Manticore быстрее Sphinx на 6,8% по задержке и на 12,2% по пропускной способности.
Тест 3 - топ 1000 частых терминов из коллекции, разбитых на группы + 1 термин из группы 1-100
Давайте посмотрим, как это работает, когда у вас есть один очень частый термин и другой менее частый. Примеры:
1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
больше быть | что было | способ быть | один выключить | просто стартап | имел платить |
их как | могут другие | могут д | думать свои | действительно еще | если дизайн |
о был | сделать тогда | было и т.д. | из приложения | к немного | на все еще |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
просто либо | а интернет | кто сеть | вы местоположение | будет программа | т в основном |
не далеко | по социальным | т прошлое | а сайты | а несколько | имеет ко |
1 писать | имеет средства | большинство парней | без разницы | имеет пространство | если в основном |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
путь программистов | увидеть название | потому что слова | думать мак | самые дорогие | время изменилось |
было сложно | мне успешно | ком клиент | слышно | по крайне | было еда |
их недели | чем yc | потому что хорошо | также десктоп | для понимания | большинство трафика |
900-950 | 950-1000 | ||||
если партия | действительно достаточно | ||||
когда серьезно | здесь серверы | ||||
думать скорость | было потерять |
Ух ты, Manticore быстрее Sphinx на 106% по пропускной способности и на 91,8% в среднем по 95p задержке.
Тест 4 - топ 1000 частых терминов из коллекции, разбитый по группам + 1 термин из группы 1-100, оба термина заключены в кавычки, чтобы создать фразу
1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
"все они" | "думают также" | "что код" | "мы приложение" | "отдать" | "пользователем" |
"http вы" | "нравится было" | "это наш" | "как статья" | "использовать сделано" | "действительно хотя бы" |
"от некоторых" | "использовать работу" | "не хорошо" | "я приложение" | "могу другой" | "если понять" |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
"другой разработчик" | "путем строительства" | "хотеть создать" | "там перед" | "любое правительство" | "их считать" |
"имеет идеи" | "я питон" | "кто дал" | "имеет полностью" | "имеет цена" | "я начал" |
"путь facebook" | "быть редактировать" | "вверх ссылка" | "использовать местоположение" | "действительно сделка" | "сейчас рано" |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
"проходили недели" | "вверх инженерия" | "имеет спрашивая" | "с п" | "кто css" | "там плюс" |
"сделать api" | "мы ожидаем" | "действительно готовые" | "шаг т" | "потому что сильный" | "для трафика" |
"было заметка" | "бы бы" | "http градус" | "http настольный" | "не иначе" | "много еды" |
900-950 | 950-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.
В случае, если у вас возникнут какие-либо проблемы, вопросы или комментарии, не стесняйтесь связаться с нами:
- на twitter
- отправив электронное письмо на [email protected]
- разместив сообщение на нашем Форуме
- пообщавшись с нами в нашем Community Slack
- пожаловавшись на то, как все плохо, на нашем bug tracker в GitHub