Как вы, вероятно, знаете, недавно вышел новый релиз 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 |
| one | much | our | every | less | pay |
| with | really | into | without | another | understand |
| was | other | still | down | already | everyone |
| 300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
| search | developers | create | interest | general | co |
| reason | whole | given | tried | model | office |
| nothing | name | friends | access | amount | paid |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| management | themselves | across | pg | paper | core |
| related | marketing | learned | opinion | pick | highly |
| goes | unless | posts | risk | strong | traffic |
| 900-950 | 950-1000 | ||||
| thoughts | decent | ||||
| interface | young | ||||
| response | english |


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 |
| other can | the no | on over | about his | should big | s ever |
| no are | my use | other why | had day | had give | them let |
| here some | been know | s where | how sure | been big | here e |
| 300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
| who developer | it book | now single | not access | at solution | their called |
| work started | an ycombinator | from add | use sites | know microsoft | as mostly |
| at hours | now value | also given | which built | than power | of early |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| know science | should marketing | should kids | the numbers | their drive | who highly |
| if agree | an minutes | t posts | time pg | there pick | has opportunity |
| would related | has country | get posts | http education | also extremely | could topic |
| 900-950 | 950-1000 | ||||
| any party | on particularly | ||||
| only response | could computers | ||||
| people firefox | about computers |


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 |
| "work not" | "you their" | "we still" | "s own" | "me getting" | "could run" |
| "my for" | "the very" | "your job" | "use got" | "here bad" | "then ever" |
| "but that" | "get com" | "i first" | "now day" | "up help" | "then making" |
| 300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
| "it information" | "them community" | "1 care" | "what mobile" | "out happy" | "to watch" |
| "com side" | "this server" | "com position" | "at huge" | "how stop" | "s written" |
| "he looks" | "was x" | "time become" | "the tried" | "should comes" | "other sounds" |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| "by api" | "don soon" | "t curious" | "was multiple" | "of fix" | "things absolutely" |
| "of three" | "use coming" | "that lack" | "who ui" | "ve understanding" | "most topic" |
| "really talking" | "make applications" | "really environment" | "will whoishiring" | "at expensive" | "more core" |
| 900-950 | 950-1000 | ||||
| "just framework" | "it sorry" | ||||
| "work resources" | "want benefit" | ||||
| "their resources" | "s further" |


Manticore v3 в среднем на 5.6% выигрывает по пропускной способности, а его задержка 95-го перцентиля ниже на 25.1%.
Тест 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%).
ТЕСТ 7: 3 И terms из групп 300-600 и 1 НЕ из 300-400
Если вы обнаружите любую проблему или неточность, не стесняйтесь сообщить нам.
Спасибо за внимание!
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!

