Как вы, вероятно, знаете, недавно был выпущен новый релиз Manticore 3.0 был выпущен .
В этом бенчмарке посмотрим, лучше ли он, чем 2.8. Окружение теста было следующим:
- подборка комментариев Hacker News 2016 года в формате CSV
- OS: 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
- stress-tester для бенчмаркинга
Конфигурация идентична для обеих версий Manticore:
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
}
Индексация
Индексация заняла 1303 секунды для Manticore 3.0 и 1322 секунды для Manticore 2.8.2:
Manticore 3.0:
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>1303.470</b> sec, 4755444 bytes/sec, 8941.07 docs/sec
total 22924 reads, 16.605 sec, 238.4 kb/call avg, 0.7 msec/call avg
total 11687 writes, 13.532 sec, 855.1 kb/call avg, 1.1 msec/call avg
Manticore 2.8:
indexing index 'full'...
collected 11654429 docs, 6198.6 MB
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6198580642 bytes
total <b>1322.239</b> sec, 4687939 bytes/sec, 8814.15 docs/sec
total 11676 reads, 15.248 sec, 452.6 kb/call avg, 1.3 msec/call avg
total 9431 writes, 12.800 sec, 1065.3 kb/call avg, 1.3 msec/call avg
индексация в 3.0 быстрее, чем в 2.8, примерно на ~1,5%.
Тесты производительности
Обе инстанции были прогреты перед тестированием.
Manticore 3.0:
total 4.7G
drwx------ 2 root root 4.0K May 14 17:41 .
drwxr-xr-x 3 root root 4.0K May 14 17:40 ..
-rw-r--r-- 1 root root 362M May 14 17:24 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 14 17:36 idx_full.spd
-rw-r--r-- 1 root root 90M May 14 17:36 idx_full.spe
-rw-r--r-- 1 root root 628 May 14 17:36 idx_full.sph
-rw-r--r-- 1 root root 29K May 14 17:24 idx_full.sphi
-rw-r--r-- 1 root root 6.5M May 14 17:36 idx_full.spi
-rw------- 1 root root 0 May 14 17:41 idx_full.spl
-rw-r--r-- 1 root root 1.4M May 14 17:24 idx_full.spm
-rw-r--r-- 1 root root 1.1G May 14 17:36 idx_full.spp
-rw-r--r-- 1 root root 59M May 14 17:24 idx_full.spt
Manticore 2.8:
total 4.6G
drwx------ 2 root root 4.0K May 16 18:38 .
drwxr-xr-x 3 root root 4.0K May 14 17:43 ..
-rw-r--r-- 1 root root 362M May 14 17:24 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 14 17:36 idx_full.spd
-rw-r--r-- 1 root root 27M May 14 17:36 idx_full.spe
-rw-r--r-- 1 root root 601 May 14 17:36 idx_full.sph
-rw-r--r-- 1 root root 6.3M May 14 17:36 idx_full.spi
-rw-r--r-- 1 root root 0 May 14 17:24 idx_full.spk
-rw------- 1 root root 0 May 16 18:38 idx_full.spl
-rw-r--r-- 1 root root 0 May 14 17:24 idx_full.spm
-rw-r--r-- 1 root root 1.1G May 14 17:36 idx_full.spp
-rw-r--r-- 1 root root 1 May 14 17:36 idx_full.sps
Тест 1 — время обработки топ‑1000 терминов из коллекции
Для начала просто запустим простой тест — сколько времени требуется, чтобы пройтись по топ‑1000 часто встречающихся терминов коллекции и найти все документы для каждого:
Результаты таковы: 77,61 секунды для Manticore 2.8 и 71,79 секунды для Manticore 3.0.

В этом тесте Manticore Search 3.0 быстрее предыдущей версии на 8%.
Тест 2 — топ‑1000 часто встречающихся терминов из коллекции, разбитых по группам (топ 1‑50, топ 50‑100 и т.д.)
Теперь посмотрим, лучше ли 3.0 в обработке терминов из разных групп частот. Ниже вы найдёте несколько случайных примеров из каждой группы:
| 1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
| один | много | наш | каждый | меньше | платить |
| с | действительно | в | без | другой | понимать |
| был | другой | все еще | вниз | уже | все |
| 300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
| поиск | разработчики | создавать | интерес | общий | компания |
| причина | целый | данный | пытался | модель | офис |
| ничего | имя | друзья | доступ | количество | оплачено |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| управление | сами | через | pg | бумага | ядро |
| связанный | маркетинг | выученный | мнение | выбрать | высоко |
| идет | если не | сообщения | риск | сильный | трафик |
| 900-950 | 950-1000 | ||||
| мысли | приличный | ||||
| интерфейс | молодой | ||||
| ответ | английский |


Manticore 2.8 в среднем быстрее, чем 3.0, на 0,4 % по задержке и обеспечивает на 0,5 % более высокий пропускной способность. Это находится в пределах диапазона погрешности.
Тест 3 — топ‑1000 часто встречающихся терминов из коллекции, разбитых по группам + 1 термин из группы 1‑100
Посмотрим, как это работает, когда у вас есть один очень частый термин и другой менее частый из разных групп частот. Примеры следующие:
| 1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
| другой может | это нет | на над | о его | должен большой | s всегда |
| нет есть | мое использование | другой почему | был день | был дать | их позволить |
| здесь некоторые | были знать | s где | насколько уверен | были большие | здесь e |
| 300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
| кто разработчик | это книга | сейчас один | не доступ | в решении | их назвали |
| работа началась | ан ycombinator | от добавить | использовать сайты | знать microsoft | в основном |
| в часы | сейчас значение | также дано | который построил | чем мощность | ранних |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| знать науку | должен маркетинг | должен дети | числа | их драйв | кто сильно |
| если согласен | одна минута | t посты | время pg | там выбрать | имеет возможность |
| были бы связаны | имеет страну | получить посты | http образование | также чрезвычайно | мог бы тема |
| 900-950 | 950-1000 | ||||
| любая партия | особенно на | ||||
| только ответ | могут компьютеры | ||||
| люди firefox | о компьютерах |


Manticore 3.0 показывает в среднем на 86.3% более высокий пропускной способность и на 109,5% более низкую 95‑процентную задержку.
Тест 4 - 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 |
| "это информация" | "их сообщество" | "одна забота" | "что мобильный" | "выйти счастливым" | "смотреть" |
| "ком сторона" | "этот сервер" | "ком позиция" | "в огромном" | "как остановить" | "s написано" |
| "он смотрит" | "был x" | "время стать" | "попытался" | "должен приходит" | "другие звуки" |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| "через api" | "не скоро" | "t любопытный" | "было несколько" | "исправить" | "вещи абсолютно" |
| "из трёх" | "использовать приходящий" | "что не хватает" | "кто ui" | "имею понимание" | "большинство темы" |
| "действительно говорящий" | "создавать приложения" | "действительно среда" | "будет кто нанимает" | "дорого" | "больше ядра" |
| 900-950 | 950-1000 | ||||
| "просто фреймворк" | "это извините" | ||||
| "рабочие ресурсы" | "хотеть выгоду" | ||||
| "их ресурсы" | "s дальше" |


Manticore v3 в среднем на 5.6% быстрее по пропускной способности и на 25.1% ниже по 95‑мильному времени отклика.
Тест 5 — по 2 термина из группы 600‑750 при разных уровнях одновременности
Этот тест направлен на демонстрацию разницы в пропускной способности при разных уровнях одновременности запросов. Несколько случайных примеров:
Примеры запросов: "talking view", "imagine 15", "curious term"


Итак, версия 3 быстрее при всех уровнях одновременности в среднем на 18% с средним 95‑мильным временем отклика ниже на 15%.
Тест 6 — 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 терминов |
| делает при плохом | этот поиск потрясающий фон | получил причину результаты взятые объявление |
| всегда пробовал истории | работает снова комментарии ссылки | чувствуй процесс ситуация быстрее принести |
Версия 3 снова побеждает: пропускная способность — на 104% выше, а 95‑мильное время отклика — на 113% ниже.
ТЕСТ 7: 3 И термина из групп 300‑600 и 1 НЕ из 300‑400
Теперь добавим один НЕ‑термин к 3 И.

пропускная способность в v3 — на 33,3% выше, 95‑мильное время отклика — на 32% ниже.
Выводы
Новая версия демонстрирует значительно более высокую производительность во всех тестах, кроме теста №2, но разница там находится в пределах погрешности (0,4‑0,5%).
Тест полностью контейнеризован и открыт в нашем GitHub . Подробные результаты можно найти здесь . Мы будем признательны, если вы запустите те же тесты на своём оборудовании или внесёте вклад, добавив новые тесты в набор, и сообщите нам результаты.
Если вы обнаружите любую проблему или неточность, не стесняйтесь сообщить нам.
Спасибо за внимание!
throughput in v3 - 33.3% higher, 95p latency - 32% lower.
Conclusions
The new version demonstrates significantly higher performance in all the tests except for the test #2, but the difference there is within the error range (0.4-0.5%).
The test is fully dockerized and
open sourced in our github
. The detailed results can be found
here
We'll appreciate if you run the same tests on your hardware or contibute by adding more tests to the suite and let us know the results.
If you find any issue or inaccuracy don't hesitate to let us know.
Thank you for reading!