Как вы, вероятно, знаете, недавно был выпущен новый релиз Manticore 3.0 был выпущен .
В этом бенчмарке давайте посмотрим, лучше ли он, чем 2.8. Тестовая среда была следующей:
- Набор данных с курируемыми комментариями 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
- 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 |
| другие могут | нет | на | о | должен большой | с когда-либо |
| нет | мой использовать | другие почему | имел день | имел дать | им позволить |
| здесь некоторые | были знать | где | как уверены | были большими | здесь е |
| 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% более низкую 95p задержку.
Тест 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 |
| "это информация" | "их сообщество" | "1 забота" | "что мобильный" | "вне счастья" | "смотреть" |
| "ком сторона" | "этот сервер" | "ком позиция" | "в огромном" | "как остановить" | "это написано" |
| "он выглядит" | "был x" | "время стать" | "он пытался" | "должен приходить" | "другие звуки" |
| 600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
| "по api" | "не скоро" | "не любопытный" | "был множественный" | "из исправить" | "вещи абсолютно" |
| "из трех" | "используйте приходя" | "что нехватка" | "кто ui" | "имею понимание" | "большинство темы" |
| "действительно говорящий" | "создавать приложения" | "действительно окружение" | "будет ктоищет" | "в дорогом" | "больше ядро" |
| 900-950 | 950-1000 | ||||
| "просто фреймворк" | "это извините" | ||||
| "работа ресурсы" | "хотеть выгоду" | ||||
| "их ресурсы" | "дальше" |


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


Таким образом, версия 3 быстрее при всех конкуренциях в среднем на 18% с средней 95p задержкой ниже на 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 терминов |
| doing under poor | these search awesome background | got reason results taken ad |
| always tried stories | working again comment links | feel process situation faster bring |
| job text card | google number network function | going days browser known salary |


Версия 3 снова выигрывает: пропускная способность - на 104% выше с 113% ниже 95p задержкой.
ТЕСТ 7: 3 И термина из групп 300-600 и 1 НЕ из 300-400
Теперь давайте добавим один термин НЕ к 3 И.


пропускная способность в v3 - на 33.3% выше, 95p задержка - на 32% ниже.
Выводы
Новая версия демонстрирует значительно более высокую производительность во всех тестах, кроме теста #2, но разница там находится в пределах погрешности (0.4-0.5%).
Тест полностью контейнеризирован и
открыт в нашем github
. Подробные результаты можно найти
здесь
Мы будем признательны, если вы проведете те же тесты на своем оборудовании или внесете свой вклад, добавив больше тестов в набор и сообщите нам результаты.
Если вы обнаружите какие-либо проблемы или неточности, не стесняйтесь сообщить нам.
Спасибо за чтение!